C# Xamarin表单可以';t创建SQLite数据库

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,

我正在使用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上的代码

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内容API
GetDatabasePath
@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);
    }

}