在我的情况下,保存的数据可以在模型更改的情况下被清除,有更好的方法吗?

private val dataSource = try {
    MyObjectBox.builder().androidContext(context).build().boxFor(XXXX::class)
} catch (e: Exception) {
    BoxStore.deleteAllFiles(context, BoxStoreBuilder.DEFAULT_NAME)
    MyObjectBox.builder().androidContext(context).build().boxFor(XXXX::class)
}

我想知道是否有这样一件事:https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Builder#fallbackToDestructiveMigration()

推荐答案

这种方法有点老套,但为什么不呢!?我的意思是,如果你不在乎失go 现有数据...

我可以建议两种可能的改进:

  • boxFor()应该在try之外,因为这里的任何错误都与模型更改无关.
  • 你可以更具体一些,而不是Exception.E、 g.DbSchemaException用于模型相关异常,或作为"中间"解决方案,DbException用于捕获任何DB相关异常(包括DbSchemaException).

因此,要调整代码,可以如下所示:

private val store = try {
    MyObjectBox.builder().androidContext(context).build()
} catch (e: DbSchemaException) {
    BoxStore.deleteAllFiles(context, BoxStoreBuilder.DEFAULT_NAME)
    MyObjectBox.builder().androidContext(context).build()
}
private val box = store.boxFor(XXXX::class)

Android相关问答推荐

修改参数应该应用于哪些子元素?

如何将结果从viewModelScope传递到活动

如何go 除回调流中不可用的状态?

在模块中找到重复的类com.google.Firebase.auth.ktx.AuthKt||Android Studio

从未设置实时数据值

如果我的圆形图像的顶部居中于卡片内部,我如何在其下方画一条弧线?

如何删除 Jetpack Compose 中按钮的左边框?

DatePickerDialog (Android/Kotlin) 的两个问题

如何绘制内边框?

在 Jetpack Compose 中使用 ViewModel 实现 startActivity 的最佳实践

如何正确地将图像上传到 Jetpack Compose 中的 LazyList 中的项目?

PullRefreshIndicator 与 ScrollableTabRow 重叠

Jetpack Compose 动画性能问题

如何在 Android 应用程序未激活/未聚焦时显示视图?

错误:构建 react-native 应用程序时包 com.facebook.react.bridge 不存在

使用 capacitor cordova 插件的 Android Studio 错误

是什么让 Android Studio 中的按钮变成紫色?加上新手的其他奇怪行为

并行运行两个挂起函数并在第一个返回时返回

如何在 Compose 中更改高程 colored颜色 ?

(Android) 如何在一对多关系中将子 ID 与父级匹配