我正在开发一个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();
}
}
}