无法在 UWP 中设置 SQLite 对象 - Xamarin Forms
SQLite object can't be set in UWP - Xamarin Forms
请考虑以下问题:
我正在尝试在 iOS、Android 和 Windows 10 台设备上的 Xamarin Forms 应用程序中使用 SQLite 数据库。
我的数据库模型处于可移植级别,并根据文档使用接口来实现平台特定的 SQLite 连接,我的 iOS 和 Android 实现工作正常,但我似乎无法让我的 UWP 版本工作。似乎每当我尝试对我的 SQLiteConnection database
对象做任何事情时,我都会得到异常 Object reference not set to an instance of an object
请查看我的 PCL 和下面的设备特定代码:
Database.cs(共享)
public class Database
{
static object locker = new object();
public static SQLiteConnection database;
public Database()
{
Debug.WriteLine("Attempting to build connection");
try
{
if(database == null)
{
Debug.WriteLine("DATABASE IS NULL");
}
database = DependencyService.Get<ISQLite>().GetConnection(); // <- Crashes here with: Object reference not set to an instance of an object
Debug.WriteLine("Get Type: " + database.GetType().ToString());
Debug.WriteLine("DB Path: " + database.DatabasePath);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
database.CreateTable<User>();
}
}
ISQLite_Windows.cs(设备特定)
class ISQLite_Windows : ISQLite
{
public ISQLite_Windows()
{
}
public SQLiteConnection GetConnection()
{
Debug.WriteLine("This debug never seems to fire");
var sqliteFilename = "EventManagementSystem.db3";
string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, sqliteFilename);
var conn = new SQLiteConnection(path);
Debug.WriteLine("Connection made, returning");
return conn;
}
}
有用信息
我正在使用 sqlite-net-pcl
版本 1.5.166-beta 的 beta NuGet 包,因为这似乎是 UWP 的建议选择。
我正在为 NuGet 包使用版本 5.2.2 Microsoft.NETCore.UniversalWindowsPlatform
应用程序构建和智能感知没有发现任何错误,但在 App.cs 初始化期间它中断了。
我似乎无法找到正在我的机器上创建的数据库文件,尽管我怀疑这是因为它在到达之前就中断了。这个问题似乎更多地与在共享级别访问数据库对象有关,而不是与设备特定的实现有关,尽管我对此很可能是错误的。
docs状态:
Registration – Each implementing class must be registered with
DependencyService via a metadata attribute. Registration enables
DependencyService to find the implementing class and supply it in
place of the interface at run time.
您的问题最可能的原因是 ISQLite
没有已注册的实施 class。
请考虑以下问题:
我正在尝试在 iOS、Android 和 Windows 10 台设备上的 Xamarin Forms 应用程序中使用 SQLite 数据库。
我的数据库模型处于可移植级别,并根据文档使用接口来实现平台特定的 SQLite 连接,我的 iOS 和 Android 实现工作正常,但我似乎无法让我的 UWP 版本工作。似乎每当我尝试对我的 SQLiteConnection database
对象做任何事情时,我都会得到异常 Object reference not set to an instance of an object
请查看我的 PCL 和下面的设备特定代码:
Database.cs(共享)
public class Database
{
static object locker = new object();
public static SQLiteConnection database;
public Database()
{
Debug.WriteLine("Attempting to build connection");
try
{
if(database == null)
{
Debug.WriteLine("DATABASE IS NULL");
}
database = DependencyService.Get<ISQLite>().GetConnection(); // <- Crashes here with: Object reference not set to an instance of an object
Debug.WriteLine("Get Type: " + database.GetType().ToString());
Debug.WriteLine("DB Path: " + database.DatabasePath);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
database.CreateTable<User>();
}
}
ISQLite_Windows.cs(设备特定)
class ISQLite_Windows : ISQLite
{
public ISQLite_Windows()
{
}
public SQLiteConnection GetConnection()
{
Debug.WriteLine("This debug never seems to fire");
var sqliteFilename = "EventManagementSystem.db3";
string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, sqliteFilename);
var conn = new SQLiteConnection(path);
Debug.WriteLine("Connection made, returning");
return conn;
}
}
有用信息
我正在使用 sqlite-net-pcl
版本 1.5.166-beta 的 beta NuGet 包,因为这似乎是 UWP 的建议选择。
我正在为 NuGet 包使用版本 5.2.2 Microsoft.NETCore.UniversalWindowsPlatform
应用程序构建和智能感知没有发现任何错误,但在 App.cs 初始化期间它中断了。
我似乎无法找到正在我的机器上创建的数据库文件,尽管我怀疑这是因为它在到达之前就中断了。这个问题似乎更多地与在共享级别访问数据库对象有关,而不是与设备特定的实现有关,尽管我对此很可能是错误的。
docs状态:
Registration – Each implementing class must be registered with DependencyService via a metadata attribute. Registration enables DependencyService to find the implementing class and supply it in place of the interface at run time.
您的问题最可能的原因是 ISQLite
没有已注册的实施 class。