E/AndroidRuntime: FATAL EXCEPTION: Thread-2 Process: com.example.cameradiary, PID: 21990 java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number. Expected identity hash: d0562aadd9063ca2a0141765861a8b25, found: 903c8b01c1005d9d530310defd042e19 at androidx.room.RoomOpenHelper.checkIdentity(RoomOpenHelper.kt:147) at androidx.room.RoomOpenHelper.onOpen(RoomOpenHelper.kt:128) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onOpen(FrameworkSQLiteOpenHelper.kt:287) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:428) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:317) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableOrReadableDatabase(FrameworkSQLiteOpenHelper.kt:232) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.innerGetDatabase(FrameworkSQLiteOpenHelper.kt:190) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getSupportDatabase(FrameworkSQLiteOpenHelper.kt:151) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.kt:104) at androidx.room.RoomDatabase.inTransaction(RoomDatabase.kt:638) at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.kt:457) at com.example.cameradiary.userDAO_Impl.getALLUsers(userDAO_Impl.java:70) at com.example.cameradiary.SecondActivity$1.run(SecondActivity.java:60)
时间: 2023-12-10 09:41:53 浏览: 62
这个错误是因为你在更改Room数据库的架构(schema)时忘记更新版本号,导致Room无法验证数据完整性。你可以简单地通过增加版本号来解决这个问题。期望的标识哈希(identity hash)为d0562aadd9063ca2a0141765861a8b25,但实际上找到的标识哈希为903c8b01c1005d9d530310defd042e19。你可以在RoomDatabase类的注释中找到有关如何更改版本号的说明。例如,你可以在你的Database类中增加一个版本号变量:
```
@Database(entities = {User.class}, version = 2)
public abstract class MyAppDatabase extends RoomDatabase {
// ...
}
```
然后,你需要在你的Migration类中实现从旧版本到新版本的数据库架构更改:
```
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// execute the necessary SQL statements to update the schema
}
};
```
你需要在调用 `Room.databaseBuilder()` 方法时传入这个Migration类的实例,以便Room能够在必要时执行更改。
```
MyAppDatabase db = Room.databaseBuilder(context, MyAppDatabase.class, "my-db-name")
.addMigrations(MIGRATION_1_2)
.build();
```