如何正确处理Realm实例删除

时间:2015-06-21 20:35:45

标签: android realm

我有一种情况,我想以懒惰的方式处理领域迁移。我不想使用领域开发人员状态繁琐的Realm Migration 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.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");
}

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

1 个答案:

答案 0 :(得分:2)

在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