如何正确处理 Realm 实例删除
How to properly handle Realm instance deletion
我有一种情况想以懒惰的方式处理领域迁移。而不是使用Realm Migration api,realm 开发者的状态很麻烦,我想删除realm 实例,然后仅在需要进行迁移时重新实例化它。我将如何正确处理这种情况,以便仅在需要升级数据库时才删除并重新实例化数据库?
假设我有一个模型
@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");
}
但是,当我尝试此操作而不是捕获异常时,我的应用程序崩溃了。
我将如何正确处理这种情况,以便仅在需要升级数据库时才删除并重新实例化数据库?
在 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
我有一种情况想以懒惰的方式处理领域迁移。而不是使用Realm Migration api,realm 开发者的状态很麻烦,我想删除realm 实例,然后仅在需要进行迁移时重新实例化它。我将如何正确处理这种情况,以便仅在需要升级数据库时才删除并重新实例化数据库?
假设我有一个模型
@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");
}
但是,当我尝试此操作而不是捕获异常时,我的应用程序崩溃了。 我将如何正确处理这种情况,以便仅在需要升级数据库时才删除并重新实例化数据库?
在 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