xamarin - 导航到注册玩家详细信息屏幕时,在 Xamarin.Forms 中引发对象引用错误
问题描述
单击Register_OnClicked
Xamarin.Forms 应用程序中的按钮时,系统会抛出System.NullReferenceException: Object reference not set to an instance of an object
此按钮将允许应用程序导航到系统保存数据的播放器注册详细信息屏幕。有人可以告知错误的原因吗?我无法弄清楚该错误的原因,已重新启动应用程序,执行clean build
操作,但仍然相同。
数据库库使用:sqlite-net-pcl
//MainPage.xaml.cs 详细信息
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
public async void NavigateButton_OnClicked(object sender, EventArgs e)
{
var tabbedPage = new TabbedPage();
tabbedPage.Children.Add(new Home("Welcome"+' '+emailEntry.Text+' '+",have a nice day!"));
tabbedPage.Children.Add(new Map());
tabbedPage.Children.Add(new Settings());
await Navigation.PushAsync(tabbedPage);
}
public async void Register_OnClicked(object sender, EventArgs e)
{
await Navigation.PushAsync(new Register());
}
}
Register.xaml.cs details 保存 Player 详细信息的地方:
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Linq;
namespace soccerapp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Register : ContentPage
{
public SQLiteConnection conn;
public Register()
{
InitializeComponent();
conn = DependencyService.Get<Isqlite>().GetConnection();
conn.CreateTable<PlayerDetails>();
}
public void RegisterSave_OnClicked(object sender, EventArgs e)
{
PlayerDetails playerDetails = new PlayerDetails();
playerDetails.FullName = fullNameEntry.Text;
playerDetails.Mobile = mobileEntry.Text;
playerDetails.SoccerPosition = soccerpostionEntry.Text;
playerDetails.Email = emailRegister.Text;
playerDetails.Password = passwordEntry.Text;
int x = 0;
try
{
x = conn.Insert(playerDetails);
}
catch (Exception ex)
{
throw ex;
}
if (x == 1)
{
DisplayAlert("Registration", "Player Registered Successfully", "Cancel");
}
else
{
DisplayAlert("Registration Failled!!!", "Please try again", "ERROR");
}
}
}
}
SQlite Connection 类创建并返回连接:
public class SQliteDroid : Isqlite
{
public SQLiteConnection GetConnection()
{
var dbase = "soccerpep";
var dbpath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
var path = Path.Combine(dbpath, dbase);
var connection = new SQLiteConnection(path);
return connection;
}
}
[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/nZ8GZ.png
来自 Debug > Windows > Call Stack 的错误详细信息添加如下;
0xFFFFFFFFFFFFFFFF in System.Diagnostics.Debugger.Mono_UnhandledException_internal C#
0x1 in System.Diagnostics.Debugger.Mono_UnhandledException C#
0x20 in Android.Runtime.DynamicMethodNameCounter.43 C#
0x12 in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw C#
0x6 in System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_0 C#
0xC in Android.App.SyncContext. C#
0xE in Java.Lang.Thread.RunnableImplementor.Run C#
0xA in Java.Lang.IRunnableInvoker.n_Run C#
0x11 in Android.Runtime.DynamicMethodNameCounter.43 C#
解决方案
通过注册页面的构造函数和 SqliteDroid 类的 GetConnection 方法进行调试。
当依赖注入失败时,我已经看到了这样难以发现的错误。这可能是因为 GetConnection 中的错误,或者是因为 SqliteDroid 尚未在您的 DependencyService 中注册。
推荐阅读
- python - Flask 应用程序未部署到 Heroku(“ikp3db”问题?)
- javascript - 反转字符列表
- c++ - 为什么“./a.out”只运行最后编译的可执行程序而不运行以前的可执行程序?
- haskell - Haskell 如何在实例声明期间推断类型?
- go - 使用值或指针接收器实现 Stringer 接口
- angular - Angular:组件不会使用来自公共服务变量的数据进行更新
- javascript - 如何将从 Ajax 请求收到的响应重定向到另一个 html 页面
- android - 无法使用 setLayoutParams 调整相机预览的大小
- python - PYTHON:访问字典中列表列表的元素
- java - 为 noOfGames 、 score 和 name 显示找不到符号