Android 如何正确处理域实例删除

Android 如何正确处理域实例删除,android,realm,Android,Realm,我有一种情况,我想以一种懒惰的方式处理领域迁移。与使用领域迁移api(领域开发人员的状态很麻烦)不同,我希望删除领域实例,然后仅在需要迁移时重新实例化它。在这种情况下,我如何正确地处理一个数据库,以便仅在数据库需要升级时才删除并重新实例化它 假设我有一个模型 @RealmClass public class testmodel extends RealmObject { private String foo; private int bar; public int get

我有一种情况,我想以一种懒惰的方式处理领域迁移。与使用领域迁移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");
}
然而,当我尝试此操作而不是捕获异常时,我的应用程序崩溃。
如何正确处理这种情况,使我仅在需要升级时删除并重新实例化数据库?

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

RealmConfiguration realmConfig = new RealmConfiguration.Builder(context)
  .schemaVersion(42)
  .deleteRealmIfMigrationNeeded()
  .build();
这将完全满足您的需求

编辑:

JavaDoc在这里:

您可以在此处阅读有关设置的更多信息:

您选择schema版本42是因为它是所有问题的答案吗?是的,在您的情况下,您可能只想在更改模型类时升级该版本:)为什么文档中没有这个?自从0.81发布以来?@DavidCorsalini很可能是一个快照版本,所以文档还没有发布。它于周五发布给jCenter。我们正在解决最后的文档问题,但预计网站将在未来几个小时内更新。在文档在线之前,我们不想在twitter/googlegroups上发布这篇文章。