Xamarin.Forms ZXing二维码扫描系统.NullReferenceException:';对象引用未设置为对象的实例;

Xamarin.Forms ZXing二维码扫描系统.NullReferenceException:';对象引用未设置为对象的实例;,xamarin.forms,nullreferenceexception,zxing,Xamarin.forms,Nullreferenceexception,Zxing,我正在制作一个带有二维码登录的xamarin.forms应用程序。当qr码有效时,其ok用户登录,但当它不正常时,我在scanPage.OnScanResult的末尾得到System.NullReferenceException:“对象引用未设置为对象的实例。”。这是我的代码: 我的属性: public Command ScanQrCodeCommand { get; set; } public Command LogInCommand { get; set; }

我正在制作一个带有二维码登录的xamarin.forms应用程序。当qr码有效时,其ok用户登录,但当它不正常时,我在scanPage.OnScanResult的末尾得到System.NullReferenceException:“对象引用未设置为对象的实例。”。这是我的代码:

我的属性:

  public Command ScanQrCodeCommand { get; set; }
        public Command LogInCommand { get; set; }
        ZXingScannerPage scanPage = new ZXingScannerPage();
        public String username;
        public string Username
        {
            get { return username; }
            set
            {
                if (username != value)
                {
                    username = value;

                    SetProperty(ref username, value);
                    OnPropertyChanged("Username");

                }
            }
        }

        public String password;
        public string Password
        {
            get { return password; }
            set
            {
                if (password != value)
                {
                    password = value;

                    SetProperty(ref password, value);
                    OnPropertyChanged("Password");

                }
            }
        }
        public User user;
        public User User
        {
            get { return user; }
            set
            {
                if (user != value)
                {
                    user = value;

                    SetProperty(ref user, value);
                    OnPropertyChanged("User");

                }
            }
        }
        public LoginViewModel()
        {
            ScanQrCodeCommand = new Command(execute: async () => await ExecuteScanQrCodeCommand());
            LogInCommand = new Command(execute: async (user_created) => await ExecuteLogInCommand(user_created));
            User = new User();
            scanPage = new ZXingScannerPage();
            Username = string.Empty;
            Password = string.Empty;
        }
        async Task ExecuteScanQrCodeCommand()
        {
            if (IsBusy)
                return;

            IsBusy = true;

            var config = new ProgressDialogConfig()
            .SetTitle("Loading...")
            .SetIsDeterministic(false)
            .SetMaskType(MaskType.Clear);
            UserDialogs.Instance.Progress(config);
            try
            {        
                await Application.Current.MainPage.Navigation.PushAsync(scanPage);

                scanPage.OnScanResult += (result) =>
                {
                    LogInCommand.Execute(result.ToString());
                    scanPage.IsScanning = false;

                    // Pop the page and show the result
                    Device.BeginInvokeOnMainThread(async () =>
                    {

                        await Application.Current.MainPage.Navigation.PopAsync();

                    });
                };<--- Here i get NullREferenceException
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                await Application.Current.MainPage.DisplayAlert("Error", "Sth wrong with the code", "OK");
            }
            finally
            {
                IsBusy = false;
                UserDialogs.Instance.Progress(config).Dispose();
            }
        }
        async Task ExecuteLogInCommand(object userLog)
        {

            if (IsBusy)
                return;

            IsBusy = true;

            var config = new ProgressDialogConfig()
            .SetTitle("Loading...")
            .SetIsDeterministic(false)
            .SetMaskType(MaskType.Clear);
            UserDialogs.Instance.Progress(config);
            try
            {
                var user_log = userLog as string;
                var pom = user_log.split(" ")
                Username = pom[0];
                Password = pom[1];
                User = await FinansovoPreglediDataStore.GetUserToken(Username , Password );
                if (User != null && User.AccessToken != null)
                {
                    SharedFunctions.SaveAccessToken(User.AccessToken);
                    Application.Current.MainPage = new NavigationPage(new MainMenu());
                }
                else if (User.AccessToken is  null)
                {
                    await Application.Current.MainPage.DisplayAlert("ERROR", "WRONG USER, "OK");
                    Application.Current.MainPage = new NavigationPage(new MainPage());
                }

            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                await Application.Current.MainPage.DisplayAlert("ERROR", "STH. WRONG", "OK");
            }
            finally
            {
                IsBusy = false;
                UserDialogs.Instance.Progress(config).Dispose();

            }
        }
        public async Task<User> GetUserToken(string username, string password)
        {
            try
            {
                if (CrossConnectivity.Current.IsConnected)
                {
                    User user = new User();
                    if (username == null || password == null || !CrossConnectivity.Current.IsConnected)
                        return null;
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    HttpContent requestContent = new StringContent("grant_type=password&username=" + username + "&password=" + password + "&login_type=" + "login_user", Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage responseMessage = await client.PostAsync("Token", requestContent);
                    var pom = responseMessage.StatusCode;
                    if (responseMessage.IsSuccessStatusCode)
                    {
                        string jsonMessage;
                        using (Stream responseStream = await responseMessage.Content.ReadAsStreamAsync())
                        {
                            jsonMessage = new StreamReader(responseStream).ReadToEnd();
                        }
                        user = (User)JsonConvert.DeserializeObject(jsonMessage, typeof(User));
                        return user;
                    }
                    else
                    {
                        return null;
                    }
                }
                else
                {

                    GetToastConfig.GetToastNoInternetConnection();
                    return null;
                }
            }
            catch(Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                return null;
            }
        }
扫描代码的任务:

  public Command ScanQrCodeCommand { get; set; }
        public Command LogInCommand { get; set; }
        ZXingScannerPage scanPage = new ZXingScannerPage();
        public String username;
        public string Username
        {
            get { return username; }
            set
            {
                if (username != value)
                {
                    username = value;

                    SetProperty(ref username, value);
                    OnPropertyChanged("Username");

                }
            }
        }

        public String password;
        public string Password
        {
            get { return password; }
            set
            {
                if (password != value)
                {
                    password = value;

                    SetProperty(ref password, value);
                    OnPropertyChanged("Password");

                }
            }
        }
        public User user;
        public User User
        {
            get { return user; }
            set
            {
                if (user != value)
                {
                    user = value;

                    SetProperty(ref user, value);
                    OnPropertyChanged("User");

                }
            }
        }
        public LoginViewModel()
        {
            ScanQrCodeCommand = new Command(execute: async () => await ExecuteScanQrCodeCommand());
            LogInCommand = new Command(execute: async (user_created) => await ExecuteLogInCommand(user_created));
            User = new User();
            scanPage = new ZXingScannerPage();
            Username = string.Empty;
            Password = string.Empty;
        }
        async Task ExecuteScanQrCodeCommand()
        {
            if (IsBusy)
                return;

            IsBusy = true;

            var config = new ProgressDialogConfig()
            .SetTitle("Loading...")
            .SetIsDeterministic(false)
            .SetMaskType(MaskType.Clear);
            UserDialogs.Instance.Progress(config);
            try
            {        
                await Application.Current.MainPage.Navigation.PushAsync(scanPage);

                scanPage.OnScanResult += (result) =>
                {
                    LogInCommand.Execute(result.ToString());
                    scanPage.IsScanning = false;

                    // Pop the page and show the result
                    Device.BeginInvokeOnMainThread(async () =>
                    {

                        await Application.Current.MainPage.Navigation.PopAsync();

                    });
                };<--- Here i get NullREferenceException
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                await Application.Current.MainPage.DisplayAlert("Error", "Sth wrong with the code", "OK");
            }
            finally
            {
                IsBusy = false;
                UserDialogs.Instance.Progress(config).Dispose();
            }
        }
        async Task ExecuteLogInCommand(object userLog)
        {

            if (IsBusy)
                return;

            IsBusy = true;

            var config = new ProgressDialogConfig()
            .SetTitle("Loading...")
            .SetIsDeterministic(false)
            .SetMaskType(MaskType.Clear);
            UserDialogs.Instance.Progress(config);
            try
            {
                var user_log = userLog as string;
                var pom = user_log.split(" ")
                Username = pom[0];
                Password = pom[1];
                User = await FinansovoPreglediDataStore.GetUserToken(Username , Password );
                if (User != null && User.AccessToken != null)
                {
                    SharedFunctions.SaveAccessToken(User.AccessToken);
                    Application.Current.MainPage = new NavigationPage(new MainMenu());
                }
                else if (User.AccessToken is  null)
                {
                    await Application.Current.MainPage.DisplayAlert("ERROR", "WRONG USER, "OK");
                    Application.Current.MainPage = new NavigationPage(new MainPage());
                }

            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                await Application.Current.MainPage.DisplayAlert("ERROR", "STH. WRONG", "OK");
            }
            finally
            {
                IsBusy = false;
                UserDialogs.Instance.Progress(config).Dispose();

            }
        }
        public async Task<User> GetUserToken(string username, string password)
        {
            try
            {
                if (CrossConnectivity.Current.IsConnected)
                {
                    User user = new User();
                    if (username == null || password == null || !CrossConnectivity.Current.IsConnected)
                        return null;
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    HttpContent requestContent = new StringContent("grant_type=password&username=" + username + "&password=" + password + "&login_type=" + "login_user", Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage responseMessage = await client.PostAsync("Token", requestContent);
                    var pom = responseMessage.StatusCode;
                    if (responseMessage.IsSuccessStatusCode)
                    {
                        string jsonMessage;
                        using (Stream responseStream = await responseMessage.Content.ReadAsStreamAsync())
                        {
                            jsonMessage = new StreamReader(responseStream).ReadToEnd();
                        }
                        user = (User)JsonConvert.DeserializeObject(jsonMessage, typeof(User));
                        return user;
                    }
                    else
                    {
                        return null;
                    }
                }
                else
                {

                    GetToastConfig.GetToastNoInternetConnection();
                    return null;
                }
            }
            catch(Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                return null;
            }
        }
我对API的调用:

  public Command ScanQrCodeCommand { get; set; }
        public Command LogInCommand { get; set; }
        ZXingScannerPage scanPage = new ZXingScannerPage();
        public String username;
        public string Username
        {
            get { return username; }
            set
            {
                if (username != value)
                {
                    username = value;

                    SetProperty(ref username, value);
                    OnPropertyChanged("Username");

                }
            }
        }

        public String password;
        public string Password
        {
            get { return password; }
            set
            {
                if (password != value)
                {
                    password = value;

                    SetProperty(ref password, value);
                    OnPropertyChanged("Password");

                }
            }
        }
        public User user;
        public User User
        {
            get { return user; }
            set
            {
                if (user != value)
                {
                    user = value;

                    SetProperty(ref user, value);
                    OnPropertyChanged("User");

                }
            }
        }
        public LoginViewModel()
        {
            ScanQrCodeCommand = new Command(execute: async () => await ExecuteScanQrCodeCommand());
            LogInCommand = new Command(execute: async (user_created) => await ExecuteLogInCommand(user_created));
            User = new User();
            scanPage = new ZXingScannerPage();
            Username = string.Empty;
            Password = string.Empty;
        }
        async Task ExecuteScanQrCodeCommand()
        {
            if (IsBusy)
                return;

            IsBusy = true;

            var config = new ProgressDialogConfig()
            .SetTitle("Loading...")
            .SetIsDeterministic(false)
            .SetMaskType(MaskType.Clear);
            UserDialogs.Instance.Progress(config);
            try
            {        
                await Application.Current.MainPage.Navigation.PushAsync(scanPage);

                scanPage.OnScanResult += (result) =>
                {
                    LogInCommand.Execute(result.ToString());
                    scanPage.IsScanning = false;

                    // Pop the page and show the result
                    Device.BeginInvokeOnMainThread(async () =>
                    {

                        await Application.Current.MainPage.Navigation.PopAsync();

                    });
                };<--- Here i get NullREferenceException
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                await Application.Current.MainPage.DisplayAlert("Error", "Sth wrong with the code", "OK");
            }
            finally
            {
                IsBusy = false;
                UserDialogs.Instance.Progress(config).Dispose();
            }
        }
        async Task ExecuteLogInCommand(object userLog)
        {

            if (IsBusy)
                return;

            IsBusy = true;

            var config = new ProgressDialogConfig()
            .SetTitle("Loading...")
            .SetIsDeterministic(false)
            .SetMaskType(MaskType.Clear);
            UserDialogs.Instance.Progress(config);
            try
            {
                var user_log = userLog as string;
                var pom = user_log.split(" ")
                Username = pom[0];
                Password = pom[1];
                User = await FinansovoPreglediDataStore.GetUserToken(Username , Password );
                if (User != null && User.AccessToken != null)
                {
                    SharedFunctions.SaveAccessToken(User.AccessToken);
                    Application.Current.MainPage = new NavigationPage(new MainMenu());
                }
                else if (User.AccessToken is  null)
                {
                    await Application.Current.MainPage.DisplayAlert("ERROR", "WRONG USER, "OK");
                    Application.Current.MainPage = new NavigationPage(new MainPage());
                }

            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                await Application.Current.MainPage.DisplayAlert("ERROR", "STH. WRONG", "OK");
            }
            finally
            {
                IsBusy = false;
                UserDialogs.Instance.Progress(config).Dispose();

            }
        }
        public async Task<User> GetUserToken(string username, string password)
        {
            try
            {
                if (CrossConnectivity.Current.IsConnected)
                {
                    User user = new User();
                    if (username == null || password == null || !CrossConnectivity.Current.IsConnected)
                        return null;
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    HttpContent requestContent = new StringContent("grant_type=password&username=" + username + "&password=" + password + "&login_type=" + "login_user", Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage responseMessage = await client.PostAsync("Token", requestContent);
                    var pom = responseMessage.StatusCode;
                    if (responseMessage.IsSuccessStatusCode)
                    {
                        string jsonMessage;
                        using (Stream responseStream = await responseMessage.Content.ReadAsStreamAsync())
                        {
                            jsonMessage = new StreamReader(responseStream).ReadToEnd();
                        }
                        user = (User)JsonConvert.DeserializeObject(jsonMessage, typeof(User));
                        return user;
                    }
                    else
                    {
                        return null;
                    }
                }
                else
                {

                    GetToastConfig.GetToastNoInternetConnection();
                    return null;
                }
            }
            catch(Exception ex)
            {
                Debug.WriteLine(ex);
                string error = ex.Message;
                return null;
            }
        }
public异步任务GetUserToken(字符串用户名、字符串密码)
{
尝试
{
if(交叉连接.当前.断开连接)
{
用户=新用户();
如果(用户名==null | |密码==null | |!CrossConnectivity.Current.IsConnected)
返回null;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpContent requestContent=new-StringContent(“grant_type=password&username=“+username+”&password=“+password+”&login_type=“+”login_user”,Encoding.UTF8,“application/x-www-form-urlencoded”);
HttpResponseMessage responseMessage=Wait client.PostAsync(“令牌”,requestContent);
var pom=responseMessage.StatusCode;
if(responseMessage.IsSuccessStatusCode)
{
字符串jsonMessage;
使用(Stream responseStream=await responseMessage.Content.ReadAsStreamAsync())
{
jsonMessage=newstreamreader(responseStream.ReadToEnd();
}
user=(user)JsonConvert.DeserializeObject(jsonMessage,typeof(user));
返回用户;
}
其他的
{
返回null;
}
}
其他的
{
GetToastConfig.GetToAstOnPointerNetConnection();
返回null;
}
}
捕获(例外情况除外)
{
Debug.WriteLine(ex);
字符串错误=例如消息;
返回null;
}
}
我真的找不到问题所在。哪个对象是空的?!有人有同样的问题吗

更新 我终于找到了。对于我得到的所有回应,我都敬酒。当用户扫描错误的用户或传递错误的用户时,从服务器返回badRequest,并进入默认toast。但我不知道为什么我可以做GetToastConfig的例子。在带有dependecy服务的BaseViewModel中,我定义并继承了它们。可能没有显示此AsyncPop的页面,有人帮忙吗

    public class GetStatusCode : BaseViewModel
    {
        public GetStatusCode() { }      
        public async void GetResponseCode(int status_code)
        {
            switch (status_code)
            {
                case 404:
                    GetToastConfig.GetToastStatus404();
                    break;
                case 401:
                    var user = await FinansovoPreglediDataStore.RefreshToken(SharedFunctions.GetRefreshToken());
                    if (user != null && user.AccessToken != null)
                    {
                        SharedFunctions.SaveAccessToken(user.AccessToken);
                        SharedFunctions.SaveUser(user);
                        SharedFunctions.SaveRefreshToken(user.RefreshToken);
                        SharedFunctions.SaveUserFirmi(user.Firms);
                    }
                    break;
                case 500:
                    GetToastConfig.GetToastStatus500();
                    break;
                default:
                   GetToastConfig.GetToastStatusDefault();<---- Here get NullReferenceException
                    break;
            }
        }
    }
公共类GetStatusCode:BaseViewModel
{
公共GetStatusCode(){}
公共异步void GetResponseCode(int状态\ u代码)
{
开关(状态代码)
{
案例404:
GetToastConfig.GetToastStatus404();
打破
案例401:
var user=wait FinansovoPreglediDataStore.RefreshToken(SharedFunctions.GetRefreshToken());
if(user!=null&&user.AccessToken!=null)
{
SaveAccessToken(user.AccessToken);
SharedFunctions.SaveUser(用户);
SharedFunctions.SaveRefreshToken(user.RefreshToken);
SharedFunctions.SaveUserFirmi(user.Firms);
}
打破
案例500:
GetToastConfig.GetToastStatus500();
打破
违约:

GetToastConfig.GetToastStatusDefault();“哪个对象为null?”-使用调试器并查看堆栈跟踪以找出这个结果,但没有显示我可以看到哪个对象?堆栈跟踪是异常对象上的一个属性,我可以看到吗?