【发布时间】:2020-09-13 00:02:46
【问题描述】:
我正在从Codelabs 学习如何使用 Room 现在我有两张桌子
当我从 Android Studio 运行时是正常的
但是当我关闭并重新打开应用程序时出现错误
java.lang.IllegalStateException: Room 无法验证数据完整性。看起来您已更改架构但忘记更新版本号。您可以通过增加版本号来解决此问题。
重新打开应用时出错,不是安装时
我正在尝试升级版本号,但我仍然收到错误
这是我的代码
@Database(entities = [Type::class], version = 3)
abstract class TypeRoomDb : RoomDatabase(){
abstract fun typeDao() : TypeDao
companion object{
@Volatile
private var INSTANCE : TypeRoomDb? = null
fun getDataBase(
context: Context,
scope: CoroutineScope
): TypeRoomDb {
return INSTANCE ?: synchronized(this){
val instance = Room.databaseBuilder(
context.applicationContext,
TypeRoomDb::class.java,
Cons.DB_NAME
)
.fallbackToDestructiveMigration()
.addCallback(TypeDbCallBack(scope))
.build()
INSTANCE = instance
instance
}
}
private class TypeDbCallBack(
private val scope: CoroutineScope
) : RoomDatabase.Callback(){
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
INSTANCE?.let { database ->
scope.launch(Dispatchers.IO) {
populateDb(
database.typeDao()
)
}
}
}
}
fun populateDb(typeDao: TypeDao){
typeDao.deleteAll()
/*out*/
typeDao.insert(
Type(
"000",
"Makan",
0
)
)
typeDao.insert(
Type(
"001",
"Transportasi",
0
)
)
typeDao.insert(
Type(
"002",
"Makanan Ringan",
0
)
)
typeDao.insert(
Type(
"003",
"Komunikasi",
0
)
)
/*in*/
typeDao.insert(Type(
"500",
"Gaji",
1))
typeDao.insert(
Type(
"5001",
"Hadiah",
1
)
)
}
}
}
我的第二张桌子
@Database(entities = [LogKeuangan::class], version = 2)
abstract class LogKeuanganRoomDb : RoomDatabase() {
abstract fun logKeuanganDao(): LogKeuanganDao
companion object {
@Volatile
private var INSTANCE: LogKeuanganRoomDb? = null
fun getDataBase(
context: Context,
scope: CoroutineScope
): LogKeuanganRoomDb {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
LogKeuanganRoomDb::class.java,
Cons.DB_NAME
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
instance
}
}
}
}
【问题讨论】: