【问题标题】:Room database throwing error after reinstalling - Room cannot verify the data integrity重新安装后房间数据库抛出错误 - 房间无法验证数据完整性
【发布时间】:2020-08-23 20:41:12
【问题描述】:

我正处于项目开发阶段。所以,我现在基本上不需要迁移。我之前有 FirstTable,而 SecondTable 是新添加的。我也已经预先打包了数据库。下面是使用的代码。

@Database(
    entities = [
        FirstTable::class,
        SecondTable::class
    ],
    version = 1,
    exportSchema = true
)
abstract class MyDatabase : RoomDatabase() {

    companion object {
        private const val databaseName = "my-db"
        private const val prepackagedDB = "prepackaged-db"

        fun buildDatabase(context: Context): MyDatabase {
            return Room.databaseBuilder(context, MyDatabase::class.java, databaseName) 
                .createFromAsset(prepackagedDB) 
                .build()
        }
    }
}

我还在 AndroidManifest.xml 中给出了android:allowBackup="false"。我不想使用fallbackToDestructiveMigration(),它也会清除我的预打包数据库。

我在模拟器(API 级别 29)中卸载了该应用程序并运行了该应用程序。我收到此错误。

我无法理解为什么重新安装会导致此问题。有人可以告诉我我出了什么问题吗?

【问题讨论】:

  • 在注释中提及实体时尝试使用大括号。所以,entities = { FirstTable::class, SecondTable::class }
  • 另外,请指出错误
  • @Vedant 错误是我在问题标题中提到的
  • 也许您的预打包数据库架构与您当前的架构不同(也许它不包括您的 SecondTable)?您究竟是如何获得这个预打包的数据库的?

标签: android kotlin android-sqlite android-room


【解决方案1】:

在预打包的数据库中包含新表(一个空表),然后它就可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2020-03-18
    • 2018-03-28
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多