我试图找出为什么我的少数用户仍然遇到可怕的“房间无法验证数据完整性”错误。每当我收到此错误时,我都会更改版本号,然后它会再次开始工作。然而,我仍然看到大约 100 个用户在最新版本上仍然遇到崩溃问题。我现在已经升级了 5 次版本,但没有任何解决办法。
不过,我做了一些改变。我删除了一些实体,并且不断更新数据模型。但在升级版本后,我在本地从未收到此错误。知道为什么这些用户仍然会得到它吗?另外,我有时会重复使用以前的版本号。有时我只是将其恢复为1。但最新版本是201,从未使用过。重复使用版本号有什么不好吗?预先感谢。
@Database(
entities = [
RentalResponse::class,
UserResponse::class,
RentalReviewResponse::class,
SearchedLocation::class,
SearchItem::class,
SettingsResponse::class,
CancellationPolicyResponse::class],
version = 201,
exportSchema = true
)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun rentalDao(): RentalDao
abstract fun userDao(): UserDao
abstract fun reviewsDao(): ReviewsDao
abstract fun searchedLocationsDao(): SearchedLocationsDao
abstract fun settingsDao(): SettingsDao
companion object {
private lateinit var INSTANCE: AppDatabase
fun getInstance(context: Context): AppDatabase {
if (!this::INSTANCE.isInitialized) {
synchronized(AppDatabase::class) {
INSTANCE = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"outdoorsy.db"
)
.fallbackToDestructiveMigration()
.build()
}
}
return INSTANCE
}
}
}
唯一可以安全地重新使用版本号的情况是更改数据库文件名并从新的数据库开始。然后由您来清理旧数据库。
数据库版本只会增加。跳过版本应该是安全的,尤其是在破坏性迁移的情况下。所以如果你开发时使用版本4、5、6,发布时不用担心设置回4,可以用7发布。