android - 如何正确处理Realm实例删除

标签 android realm

我遇到了一种情况,我想以一种懒惰的方式处理 Realm 迁移。我想删除 Realm 实例,然后仅在需要进行迁移时重新实例化它,而不是使用 Realm 开发人员认为很麻烦的 Realm 迁移 API。我如何正确处理这种情况,以便仅在需要升级时才删除并重新实例化数据库?

假设我有一个模型

@RealmClass
public class testmodel extends RealmObject {
    private String foo;
    private int bar;
    public int getBar() {
        return bar;
    }

    public void setBar(int bar) {
        this.bar = bar;
    }


    public String getFoo() {
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }
}

我想使用正确的 getter 和 setter 将另一个字符串 bazz 添加到模型中。

目前,我只要在第一次实例化 Realm 时将其删除就可以做到这一点。就像这样:

    Realm.deleteRealmFile(getApplicationContext());
    realm = Realm.getInstance(getApplicationContext());

现在,假设我不想在每次应用程序启动时都清除我的数据,但仍然想在需要时在实例中执行此操作。我想这样的好方法应该是这样的。

try{ 
    Log.d(TAG, "started realm creation");
    realm = Realm.getInstance(getApplicationContext());
    Log.d(TAG, "successfully created realm");
}
catch (RealmException e){ // I tried RealmMigrationNeededException and IllegalState Exception but neither are caught
    Log.d(TAG, "try deleting realm");
    Realm.deleteRealmFile(getApplicationContext());
    realm = Realm.getInstance(getApplicationContext());
    Log.d(TAG, "deleted realm and remade successfully");
}

但是,当我尝试执行此操作而不是捕获异常时,我的应用程序崩溃了。 我如何正确处理这种情况,以便仅在需要升级时才删除并重新实例化数据库?

最佳答案

在 Realm 0.81.0 中,您可以使用新的 RealmConfiguration 对象:

RealmConfiguration realmConfig = new RealmConfiguration.Builder(context)
  .schemaVersion(42)
  .deleteRealmIfMigrationNeeded()
  .build();

这将完全满足您的要求。

编辑:

JavaDoc 在这里:https://realm.io/docs/java/latest/api/io/realm/RealmConfiguration.Builder.html

您可以在此处阅读有关设置的更多信息: https://realm.io/docs/java/latest/#configuring-a-realm

关于android - 如何正确处理Realm实例删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30969083/

相关文章:

android - Realm 数据库 - 不支持类型 x 的字段

android - 有没有办法在 Android 上隐藏/混淆 .realm 文件?

Android:如何在我的 Activity 中启动电话,然后再返回?

ios - 在 Realm 之间切换(iOS/Swift 3)

swift - 在 Realm 中存储字符串数组列表

ios - Realm Swift 仅在本地使用,但它仍会尝试在线连接

android - 三星 Galaxy Note 8 上的 ADB 'unauthorized'

java - 比较 hashmap 键中的 ArrayList

android - 如何在 build.gradle 中检索 ADB 的路径

java - 针对不同的屏幕密度使用不同的字体