我有一种情况,我想以懒惰的方式处理领域迁移。我不想使用领域开发人员状态繁琐的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");
}
然而,当我尝试这个而不是被捕获的异常时,我的应用程序崩溃了。 我如何正确处理这种情况,以便只在需要升级时才删除并重新实例化数据库?
答案 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