C# Xamarin表单可以';t创建SQLite数据库
我正在使用Xamarin.Forms构建一个新项目,我想使用SQLite来存储用户数据。我正在使用.Net标准项目。 我在所有4个项目(共享代码、droid、ios和uwp)中安装了Frank A.Krueger的sqlite net pcl NuGet包。我创建了IFILHELPER接口和在所有项目中实现该接口的类,正如文档中告诉您的那样。 当我第一次启动应用程序时,我想在数据库中插入一些默认值,但我只得到一个例外。我一直在调试,当在App.xaml.cs文档上创建数据库时,它只返回null,所以我没有得到任何数据库 我一遍又一遍地检查了所有代码,一切正常,所以我想知道sqlite net pcl是否与.net标准项目兼容?这个问题有什么解决办法吗 这是App.xaml.cs上的代码C# Xamarin表单可以';t创建SQLite数据库,c#,sqlite,xamarin,xamarin.forms,sqlite-net-pcl,C#,Sqlite,Xamarin,Xamarin.forms,Sqlite Net Pcl,我正在使用Xamarin.Forms构建一个新项目,我想使用SQLite来存储用户数据。我正在使用.Net标准项目。 我在所有4个项目(共享代码、droid、ios和uwp)中安装了Frank A.Krueger的sqlite net pcl NuGet包。我创建了IFILHELPER接口和在所有项目中实现该接口的类,正如文档中告诉您的那样。 当我第一次启动应用程序时,我想在数据库中插入一些默认值,但我只得到一个例外。我一直在调试,当在App.xaml.cs文档上创建数据库时,它只返回null,
static AppDatabase database;
public App ()
{
InitializeComponent();
MainPage = new MainPage();
}
public static AppDatabase Database
{
get
{
if (database == null)
{
database = new AppDatabase(DependencyService.Get<IFileHelper>().GetLocalFilePath("AppDatabase.db3"));
System.Threading.Thread.Sleep(500);
}
return database;
}
}
我理解这个异常,因为数据库是空的,所以我不能聚合任何表或任何东西,因为数据库不存在,但是为什么它不创建数据库呢
这是共享代码的接口
namespace FitApp
{
public interface IFileHelper
{
string GetLocalFilePath(string fileName);
}
}
以及在droid项目上实现接口的类:
[assembly: Dependency(typeof(FitApp.Droid.FileHelper))]
namespace FitApp.Droid
{
public class FileHelper : IFileHelper
{
public string GetLocalFilePath(string fileName)
{
string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
return System.IO.Path.Combine(path, fileName);
}
}
}
谢谢我发现这个页面对使用Xamarin开始使用SQLite非常有帮助 注意:此页面未使用
async
数据库
我的实现是有效的。初始化
public SQLiteAsyncConnection AsyncDb { get; private set; }
public App ()
{
InitializeComponent();
AsyncDb = DependencyService.Get<IDatabaseConnection>().AsyncDbConnection();
}
机器人实现
public class DatabaseConnection_Droid : IDatabaseConnection
{
public SQLiteAsyncConnection AsyncDbConnection()
{
var dbName = "DiceyData.db3";
var path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), dbName);
return new SQLiteAsyncConnection(path);
}
}
然后可以对appwide属性进行操作,例如;
await((App)Application.Current).AsyncDb.CreateTableAysnc()代码>“我只是遇到了一个例外”-这相当于去找机械师说“仪表板上的一盏灯亮了,但我不知道是哪盏灯”。那没用。您需要告诉我们发生了哪个特定异常,是哪一行导致的,并包括代码的相关部分。堆栈跟踪/日志也会有所帮助。AggregateException意味着发生了多个错误-您需要检查异常对象以获得特定错误的详细信息。提示:您应该使用实际的Android数据库位置,通过Android内容APIGetDatabasePath
@SushiHangover,感谢您的反馈。我对Android一点也不太熟悉,因此使用Xamarin来完成繁重的工作。你能详细说明我使用的路径方法和你建议的方法之间的区别吗?
public interface IDatabaseConnection
{
SQLite.SQLiteAsyncConnection AsyncDbConnection();
}
public class DatabaseConnection_Droid : IDatabaseConnection
{
public SQLiteAsyncConnection AsyncDbConnection()
{
var dbName = "DiceyData.db3";
var path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), dbName);
return new SQLiteAsyncConnection(path);
}
}