簡體   English   中英

Xamarin Forms Android app crashes after creating a class object during event handler

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM