Room 无法验证数据完整性错误,在版本升级后仍显示在 Crashlytics 中

问题描述 投票:0回答:1

我试图找出为什么我的少数用户仍然遇到可怕的“房间无法验证数据完整性”错误。每当我收到此错误时,我都会更改版本号,然后它会再次开始工作。然而,我仍然看到大约 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
    }
  }
}
android android-room android-database
1个回答
0
投票

唯一可以安全地重新使用版本号的情况是更改数据库文件名并从新的数据库开始。然后由您来清理旧数据库。

数据库版本只会增加。跳过版本应该是安全的,尤其是在破坏性迁移的情况下。所以如果你开发时使用版本4、5、6,发布时不用担心设置回4,可以用7发布。

© www.soinside.com 2019 - 2024. All rights reserved.