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

重新打开应用程序时,房间无法验证数据完整性

杨骁
2023-03-14

当我从Android Studio运行时是正常的

但当我关闭并重新打开应用程序时,我得到了错误

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
            }
        }

    }
}

共有1个答案

萧凡
2023-03-14

中明确提到的一切

IllegalStateException:Room无法验证数据完整性。看起来您已经更改了架构,但忘记更新版本号。您可以通过增加版本号来解决这个问题。

只需增加版本并将exportschema设置为false

@Database(entities = [Type::class], version = 3)
@Database(entities = [Type::class], version = 4, exportSchema = false)
 类似资料:
  • 我在项目开发阶段。因此,我现在基本上不需要迁移。我以前有第一个表,第二个表是新添加的表。我已经预装了db。下面是使用的代码。 我还在AndroidManifest中给出了。xml。我不想使用,它也会清除我的预打包数据库。 我在emulator(API级别29)中卸载了该应用程序并运行了该应用程序。我得到了这个错误。 我不明白为什么重新安装会导致这个问题。有人能让我知道我做错了什么吗?

  • 自那时起,该应用程序处于开发阶段,我使用该应用程序来避免迁移。所以我已经从设备中配置了应用程序,并通过Android Studio安装(运行)。但它的给出跟随错误- Room无法验证数据完整性。看起来您已经更改了架构,但忘记更新版本号。您可以简单地通过增加版本号来解决这个问题。 在我的清单中,allowBackup设置为false,如下所示- 已编辑 我有一件事要提。我在资产文件夹中有一个sqli

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

  • 它说要使用以下命令: 在Google Shell中,我尝试了以下操作: 我知道命令指向的是正确的文件位置。如何成功验证应用程序默认凭据?

  • 在mac OS Catalina上,对于Fastlane,每当我尝试运行任何Fastlane命令时,都会看到一个错误。 “nokogiri.bundle”无法打开,因为无法验证其完整性

  • 我正在使用Spring引导应用程序连接MongoDB实例。我们已在MongoDB上启用了以下角色的身份验证 角色:[ { role: "dbOwner ",db: "{{ mongo.database_name }}" } 角色:[ { role: "readWrite ",db: "{{ mongo.database_name }}" } 我们使用conf文件提供凭证 数据: mongodb。u