[英]creating a custom render on xamarin forms crashes with app is in break mode
[英]Xamarin Forms Android app crashes after creating a class object during event handler
在我的登錄頁面中,每當我創建用戶的 class object(這是訪問其屬性所必需的)時,應用程序就會崩潰。
我的登錄頁面代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using WeatherApp.Models;
using Xamarin.Forms;
namespace WeatherApp
{
public partial class LoginPage : ContentPage
{
public LoginPage()
{
InitializeComponent();
}
async void Button_Clicked(System.Object sender, System.EventArgs e)
{
User user = new User();
//var username = Username.Text;
//var password = Password.Text;
//var _user = user.GetUser(username);
/*if (username == _user.Username && password == _user.Password)
{
user.Username = username;
user.Firstname = _user.Firstname;
await DisplayAlert("Log in successful", null, "OK");
await Navigation.PushAsync(new ProfilePage(user));
}
else
{
await DisplayAlert("Log in failed", $"No such combination with username: {username}", "Try again");
}*/
await DisplayAlert("Test OK", null, "OK");
}
}
}
用戶 class 代碼:
using System;
using System.Collections.Generic;
using System.Linq;
namespace WeatherApp.Models
{
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public List<User> _users = new List<User>
{
new User { Id = 1, Username = "user1", Password = "admin123", Firstname = "John", Lastname = "Doe" },
new User { Id = 2, Username = "user2", Password = "admin123", Firstname = "Eric", Lastname = "Johnsson"},
new User { Id = 3, Username = "user3", Password = "admin123", Firstname = "Elisabeth", Lastname = "Kant"}
};
public User GetUser(string username)
{
return _users.SingleOrDefault(u => u.Username == username);
}
}
}
我注釋掉了根本不執行的代碼片段,因為當我實例化用戶 object 時應用程序已經崩潰。 我認為用戶 object 實例化一定是問題所在,因為當我注釋掉 object 實例化時,“測試”DisplayAlert 工作得非常好。 這里另一個奇怪的元素是它以前可以工作,但突然停止工作。 我的 VS 是最新的,我正在使用 Pie 9.0 - API 28 操作系統。 構建 output 向我顯示以下錯誤(不確定是否與手頭的問題有關):
Thread started: #9
[Mono] DllImport searching in: '__Internal' ('(null)').
[Mono] Searching for 'java_interop_jnienv_call_static_void_method_a'.
[Mono] Probing 'java_interop_jnienv_call_static_void_method_a'.
[Mono] Found as 'java_interop_jnienv_call_static_void_method_a'.
[] HostConnection::get() New Host Connection established 0xd0b49740, tid 8352
[ConfigStore] android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
[ConfigStore] android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
[OpenGLRenderer] Initialized EGL, version 1.4
[OpenGLRenderer] Swap behavior 1
[OpenGLRenderer] Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
[OpenGLRenderer] Swap behavior 0
[EGL_emulation] eglCreateContext: 0xd1136580: maj 3 min 0 rcv 3
[EGL_emulation] eglMakeCurrent: 0xd1136580: ver 3 0 (tinfo 0xd0af1d60)
[Choreographer] Skipped 31 frames! The application may be doing too much work on its main thread.
[EGL_emulation] eglMakeCurrent: 0xd1136580: ver 3 0 (tinfo 0xd0af1d60)
[OpenGLRenderer] Davey! duration=847ms; Flags=0, IntendedVsync=4884011429238, Vsync=4884528095884, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=4884531739711, AnimationStart=4884531936711, PerformTraversalsStart=4884533006711, DrawStart=4884536005711, SyncQueued=4884760953711, SyncStart=4884764832711, IssueDrawCommandsStart=4884773311711, SwapBuffers=4884824837711, FrameCompleted=4884862621711, DequeueBufferDuration=734000, QueueBufferDuration=3630000,
[Mono] DllImport searching in: '__Internal' ('(null)').
[Mono] Searching for 'java_interop_jnienv_call_float_method_a'.
[Mono] Probing 'java_interop_jnienv_call_float_method_a'.
[Mono] Found as 'java_interop_jnienv_call_float_method_a'.
[Mono] Requesting loading reference 7 (of 11) of /storage/emulated/0/Android/data/com.companyname.weatherapp/files/.__override__/Xamarin.Android.Support.Fragment.dll
[Mono] Loading reference 7 of /storage/emulated/0/Android/data/com.companyname.weatherapp/files/.__override__/Xamarin.Android.Support.Fragment.dll asmctx DEFAULT, looking for Xamarin.Android.Arch.Lifecycle.LiveData.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
[Mono] Assembly Ref addref Xamarin.Android.Support.Fragment[0xe885cfe0] -> Xamarin.Android.Arch.Lifecycle.LiveData.Core[0xe885c260]: 2
[Choreographer] Skipped 36 frames! The application may be doing too much work on its main thread.
[Mono] Requesting loading reference 7 (of 8) of /storage/emulated/0/Android/data/com.companyname.weatherapp/files/.__override__/WeatherApp.Android.dll
[Mono] Loading reference 7 of /storage/emulated/0/Android/data/com.companyname.weatherapp/files/.__override__/WeatherApp.Android.dll asmctx DEFAULT, looking for Xamarin.Forms.Platform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null
[Mono] Assembly Ref addref WeatherApp.Android[0xe885ba80] -> Xamarin.Forms.Platform[0xe885de20]: 3
[OpenGLRenderer] Davey! duration=768ms; Flags=0, IntendedVsync=4891577757377, Vsync=4892177757353, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=4892194044711, AnimationStart=4892194119711, PerformTraversalsStart=4892195493711, DrawStart=4892336371711, SyncQueued=4892337359711, SyncStart=4892337854711, IssueDrawCommandsStart=4892338010711, SwapBuffers=4892338797711, FrameCompleted=4892346959711, DequeueBufferDuration=1586000, QueueBufferDuration=3761000,
[Choreographer] Skipped 30 frames! The application may be doing too much work on its main thread.
[libc] Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xff7d5f94 in tid 8292 (name.weatherapp), pid 8292 (name.weatherapp)
這是模擬器顯示的錯誤:
解決這個問題真的會讓我很開心,因為我已經為此苦苦掙扎了好幾個小時。
您需要創建一個與您的用戶分開的User
服務UserService
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}
public class UserService {
private List<User> _users = new List<User>
{
new User { Id = 1, Username = "user1", Password = "admin123", Firstname = "John", Lastname = "Doe" },
new User { Id = 2, Username = "user2", Password = "admin123", Firstname = "Eric", Lastname = "Johnsson"},
new User { Id = 3, Username = "user3", Password = "admin123", Firstname = "Elisabeth", Lastname = "Kant"}
};
public User GetUser(string username)
{
return _users.SingleOrDefault(u => u.Username == username);
}
}
那么您的點擊處理程序將如下所示
async void Button_Clicked(System.Object sender, System.EventArgs e)
{
var svc = new UserService();
var username = Username.Text;
var password = Password.Text;
var _user = svc.GetUser(username);
if (_user != null && username == _user.Username && password == _user.Password)
{
await DisplayAlert("Log in successful", null, "OK");
await Navigation.PushAsync(new ProfilePage(_user));
}
else
{
await DisplayAlert("Log in failed", $"No such combination with username: {username}", "Try again");
}
await DisplayAlert("Test OK", null, "OK");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.