已部署的 Android 应用程序无法使用数据库

问题描述 投票:0回答:1

我遇到了一个奇怪的情况,我为三星平板电脑开发了一个 Android 应用程序,但它无法按预期工作。用户注册步骤(应用程序的第一步)不起作用并生成空错误。
在开发阶段,MAUI Blazor 混合应用程序在 Windows 和三星平板电脑上进行了全面测试;所有模拟器也都运行成功。但是,在同一开发平板电脑上部署(完整安装 .apk 文件)应用程序后,应用程序成功启动,但用户注册失败并出现 Null 错误。似乎数据库没有像它应该或在开发过程中所做的那样被发现(创建)。

我正在使用以下路径注册数据库:

    public class SQLiteDatabase:DbContext
    {
        public static string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "ActivityData.db3");
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {          
            optionsBuilder.UseSqlite($"Filename={dbPath}");
        }
    }

// and properly setup the injection service in the MauiProgram.cs:
 builder.Services.AddSingleton<SQLiteDatabase>();

Android 是否有特殊的数据库设置方法?我还能做些什么来使其正常工作?

android blazor maui hybrid
1个回答
0
投票

Maui提供本地数据库供开发者使用。您可以查看此文档来使用SQLite NuGet包

首先,您需要添加SQLite NuGet包并配置数据。 示例项目包含一个提供通用配置数据的 Constants.cs 文件。

其次,需要创建数据库访问类。

public class TodoItemDatabase
{
    SQLiteAsyncConnection Database;

    public TodoItemDatabase()
    {
    }

    async Task Init()
    {
        if (Database is not null)
            return;

        Database = new SQLiteAsyncConnection(Constants.DatabasePath, Constants.Flags);
        var result = await Database.CreateTableAsync<TodoItem>();
    }
    ...
}

最后,您可以使用以下方法来操作数据。

 public async Task<TodoItem> GetItemAsync(int id)
    {
        await Init();
        return await Database.Table<TodoItem>().Where(i => i.ID == id).FirstOrDefaultAsync();
    }

    public async Task<int> SaveItemAsync(TodoItem item)
    {
        await Init();
        if (item.ID != 0)
            return await Database.UpdateAsync(item);
        else
            return await Database.InsertAsync(item);
    }

    public async Task<int> DeleteItemAsync(TodoItem item)
    {
        await Init();
        return await Database.DeleteAsync(item);
    }
© www.soinside.com 2019 - 2024. All rights reserved.