【发布时间】: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