Xamarin表单查询app.database始终为null?

时间:2018-06-19 09:50:23

标签: c# android database sqlite xamarin

我正在开发一个Xamarin表单应用程序并添加了一个本地SQLite DB。 按照本教程进行设置。 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/databases

数据库正在运行,但现在App.Database查询总是返回null。我的所有查询都返回null,我在下面发布了GetSiteAsync查询作为示例。

请参阅以下查询始终返回null。

  

var site = await Database.GetSiteAsync();

与SQLite数据库相关的所有代码都发布在下面。

我的App.xaml.cs如下所示:

namespace MyApp
{
public partial class App : Application
    {
        static Database database;

        public App ()
        {
            InitializeComponent();

            Resources = new ResourceDictionary();

            MainPage = new NavigationPage(new BeginPage());

            ConnectAsync();
        }

        public static Database Database
        {
            get
            {
                if (database == null)
                {
                    database = new 
                    Database(DependencyService.Get<IFileHelper().GetLocalFilePath("TodoSQLite.db3"));
                }
                return database;
            }
        }
        public async void ConnectAsync()
        {
            var site = await Database.GetSiteAsync();
            //Always null????
        }
    }
}

我的MyApp项目中有IFileHelper接口

public interface IFileHelper
{
    string GetLocalFilePath(string filename);
}

MyApp.Android中的FileHelper

[assembly: Dependency(typeof(FileHelper))]
namespace MyApp.Droid
{
    public class FileHelper : IFileHelper
    {
        public string GetLocalFilePath(string filename)
        {
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            return Path.Combine(path, filename);
        }
    }
}

我的数据库类如下所示:

namespace MyApp.Data
{
    public class Database
    {
        readonly SQLiteAsyncConnection database;

        public Database(string dbPath)
        {
            database = new SQLiteAsyncConnection(dbPath);;
            //database.DropTableAsync<Site>().Wait();

            database.CreateTableAsync<Site>().Wait();
        }
        public Task<Site> GetSiteAsync()
        {
            return database.Table<Site>().Where(i => i.Id == 1).FirstOrDefaultAsync();
        }
    }
}

0 个答案:

没有答案