android - 捕获 RealmFileException

标签 android realm

一小部分用户遇到此错误:

Caused by io.realm.exceptions.RealmFileException Unable to open a realm at path

我已经进行了一些搜索,看起来这是由于 Realm 文件损坏所致。我已放入以下代码来捕获错误、删除 Realm 并创建一个新 Realm :

try {
  final Realm realm = Realm.getDefaultInstance()
  // realm opened successfully.  Do nothing
  realm.close();
} catch (RealmFileException e) { 
     // database corrupted. delete database
     Realm.deleteRealm(NbcRealmConfiguration.getInstance().getRealmConfiguration(getApplicationContext()));
     Realm.setDefaultConfiguration(new RealmConfiguration.Builder()
                    .name(getString(R.string.database_name))
                    .schemaVersion(REALM_SCHEMA)
                    .deleteRealmIfMigrationNeeded()
                    .build());
}

我的问题:

我无法重现此问题,因此无法测试此修复。 有谁知道这样做是否正确,或者您能提出更好的方法吗?

提前致谢

最佳答案

这是否是“正确”的方式取决于您。这将使 Realm 重生,但我想知道 Realm 是如何开始腐败的。

假设这是生产中的一个问题,我可能会继续这样做以解决眼前的问题。我会添加一些日志记录,这样您就可以看到发生这种情况的时间。然后我会优先考虑进一步研究这个问题。注意它发生的时间和速度。寻找可以帮助您确定根本原因的趋势或模式。进一步查看堆栈,看看它是否总是来自相同的代码。

如果它不在生产环境中,并且不干扰其他团队成员,那么我会留下这个问题,因为当存在一个活跃的问题时,故障排除会更容易。

关于android - 捕获 RealmFileException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50003145/

相关文章:

ios - 在 UITableView - Realm 中将结果转换为数据源列表时出错

ios - 从 Xcode 9.4 升级到 Xcode 11 以及 Swift 3.0 升级到 Swift 4.2 后,在 iOS 应用程序中使用 Realm 时指针损坏

java - 如何获得通过电话接入点连接的设备数量?

android - 将值传递给 bundle 时出现奇怪的情况

安卓开发工具包。音频管理器。 setStreamVolume 最大 int 值

php - 使用 csrf token 从 android 应用程序访问 laravel 应用程序

swift - 如何找到 Mac App 的 Realm 文件位置

java - Realm 的 RealmChangeListener 作为匿名类不会每次都被调用

Java Realm 超出范围异常

android - 使用 IJKPlayer 播放时去隔行视频