当前位置: 首页 > 知识库问答 >
问题:

如何通过应用程序重装使房间数据库持久化?

商柏
2023-03-14
class AppBackupAgentHelper: BackupAgentHelper() {
override fun onCreate() {
    addHelper("MyDatabase",
        DatabaseBackupAgentHelper(
            this,
            "MyDatabase"
        )
    )
}

class DatabaseBackupAgentHelper(context: Context, dbName:String): FileBackupHelper(context,context.getDatabasePath(dbName).absolutePath)

正在为%1请求的包运行增量备份。Package@pm@with result:Success Package com.example.myapplication3 with result:Success备份已完成with

当我重新安装应用程序时,它不还原,当我使用令牌和包名并强制在adb中还原时,它也不还原,而是给我:

/adb shell bmgr restore current token package name
Scheduling restore: Google Pixel 2
restoreStarting: 0 packages
restoreFinished: 0
done

我觉得RestoreStarting:0包中的错误一定很明显,但我在网上找不到任何可以解决这个问题的信息,也找不到代码中哪里出了问题的信息。

当我尝试将应用程序放到另一部手机上时,数据库也没有恢复。

如果你需要更多的信息请告诉我,

谢谢你的帮助

2021-01-07 15:20:23.375 1393-3162/? D/BackupManagerService: initiateOneRestore packageName=@pm@
2021-01-07 15:20:23.411 1393-3162/? V/BackupManagerService: No more packages; finishing restore
2021-01-07 15:20:23.413 1393-3162/? I/BackupRestoreController: restoreFinished for 0
2021-01-08 00:54:26.279 1393-15498/? D/BackupManagerService: [UserID:0] awaiting agent for ApplicationInfo{e23f643 com.example.myapplication3}
2021-01-08 00:54:26.293 1393-3923/? D/BackupManagerService: [UserID:0] agentConnected pkg=com.example.myapplication3 agent=android.os.BinderProxy@f2665f9
2021-01-08 00:54:26.293 1393-15498/? I/BackupManagerService: [UserID:0] got agent android.app.IBackupAgent$Stub$Proxy@e01793e
2021-01-08 00:54:26.294 1393-15498/? D/KeyValueBackupTask: Invoking agent on com.example.myapplication3
2021-01-08 00:54:26.299 32291-32458/? I/Backup: [CryptoEnableCheck] Should not encrypt backups: user not opted in.
2021-01-08 00:54:26.303 14524-14543/com.example.myapplication3 D/BackupHelperDispatcher: handling existing helper 'StoryDatabase' com.example.myapplication3.BackupClasses.DatabaseBackupAgentHelper@afc78a9
2021-01-08 00:54:26.320 1393-15498/? I/BackupRestoreController: Getting widget state for user: 0
2021-01-08 00:54:26.320 1393-15498/? V/BackupManagerConstants: getBackupFinishedNotificationReceivers(...) returns 

编辑3:

我已经使用了PJV在这个后Android备份/恢复中给出的答案:如何备份一个内部数据库?

这肯定会为我的数据库文件创建一个到google驱动器的备份,但该文件仍然没有恢复。

共有1个答案

谷梁煌
2023-03-14

您有两种选择:

>

  • 使用集中式数据库(如Firebase Realtime database)。

    room数据库数据导出到txt文件,然后在新手机上重新安装应用程序后,从txt文件中导入(读取)数据。

  •  类似资料:
    • Android的Room持久性库优雅地包含了适用于对象或集合的@Insert和@Update注释。但是,我有一个用例(包含模型的推送通知),它需要UPSERT,因为数据库中可能存在数据,也可能不存在数据。 Sqlite本机不具有up,在这个SO问题中描述了解决方法。鉴于那里的解决方案,如何将它们应用于Room? 更具体地说,如何在房间中实现插入或更新,而不破坏任何外键约束?使用insert wit

    • 根据文档,来自的room实例应该保存的数据是persist。但还是迷路了。我的项目必须数据库 第一个数据库 @database(实体=[foodmodel::class],version=4,exportSchema=false)抽象类FoodDatabase:RoomDatabase(){ 第二数据库 抽象类MyFoodDatabase:RoomDatabase(){abstract val M

    • 有没有更简单的方法可以查看Android Studio中使用Room Persistence Library创建的数据库的内容?

    • 我正在迁移一个运行在Android上的现有应用程序,并正在将其迁移到Raspberry Pi。只是想知道是否有可能直接迁移Room数据库的使用。

    • 我转换java代码到kotlin代码,我得到类型未解决的java类错误。 我的Java类是 已转换的Kotlin类 非常感谢。

    • 转换器.KT FoodDatabase.kt 当我运行以下代码创建数据库时: 我还附上我的评分文件: 有人遇到过这个问题吗?