【问题标题】:Room cannot verify data integrity but I have desctructive migration enabledRoom 无法验证数据完整性,但我启用了破坏性迁移
【发布时间】:2019-10-25 12:21:48
【问题描述】:

我从RoomIllegalStateException 收到一条错误消息,显示“房间无法验证数据完整性”,因为我将 db 值从不可为空更改为可空,但我的数据库设置如下:

@JvmStatic
@Provides
@ApplicationScope
fun provideRoomDatabase(context: Application): MyDb = Room.databaseBuilder(
    context,
    MyDb::class.java, DB_NAME
).fallbackToDestructiveMigration().build()

这可能是什么问题?

【问题讨论】:

  • 更改后是否增加了数据库版本?
  • 我必须这样做吗?既然fallingBackToDestructiveMigration() 为我重新创建了数据库?
  • 确实如此,但正如 doc developer.android.com/training/data-storage/room/… 中所述,有时它仍然使用旧模式,因此通过增加版本,您可以修复您的异常
  • 您可以回答这个并确认并关闭。谢谢。

标签: android android-sqlite android-room


【解决方案1】:

您在进行更改后是否增加了数据库版本?由于它确实重新创建了数据库,但有时它仍然使用旧模式,因此通过增加版本,您可以修复您的异常。您也可以在此处的文档中查看它Room Migration

更新数据库的架构后,某些设备上的数据库可能仍会使用较旧的架构版本。如果 Room 找不到将该设备的数据库从旧版本升级到当前版本的迁移规则,则会发生 IllegalStateException。

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2017-11-16
    • 2020-09-13
    • 2021-08-07
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多