当我打电话给Realm.deleteRealm(config)时我有一个例外:
java.lang.IllegalStateException:不允许删除该文件 与开放的领域相关联。记得关闭()所有实例 在删除其文件之前的领域
我在Application.onCreate中的Realm.init()之后调用它,所以没有理由打开其他实例。
public void onCreate() {
Realm.init(this);
Realm realm;
RealmConfiguration config = getConfig();
try {
realm = Realm.getInstance(config); // Will migrate if needed
}
catch (RealmMigrationNeededException e)
{
Realm.deleteRealm(config);
realm = Realm.getInstance(config);
}
}
我看到了这些主题,但无法看到解决方案:
https://github.com/realm/realm-java/issues/4552
https://github.com/realm/realm-java/issues/5416
修改
我认为我的问题是当我重新启动应用程序以尝试失败迁移时。在应用程序中,我打开但未关闭的实例,并且无法轻松关闭它们,代码太复杂了。当我重新启动应用程序来测试迁移异常并向模型添加字段时,可能会在上次启动时打开一些实例。
编辑2:
我试图回到领域3.0.0(我以前的版本),我没有这个IllegalStateException。我目前正在使用4.2.0。
也许我错过了更改日志中的内容..
答案 0 :(得分:0)
您可以使用
public void onCreate() {
Realm.init(this);
Realm realm;
RealmConfiguration config = getConfig();
try {
realm = Realm.getInstance(config); // Will migrate if needed
}
catch (RealmMigrationNeededException e)
{
realm.close();
Realm.deleteRealm(config);
realm = Realm.getInstance(config);
}
}
而不是
public void onCreate() {
Realm.init(this);
Realm realm;
RealmConfiguration config = getConfig();
try {
realm = Realm.getInstance(config); // Will migrate if needed
}
catch (RealmMigrationNeededException e)
{
Realm.deleteRealm(config);
realm = Realm.getInstance(config);
}
}
答案 1 :(得分:0)
我从这个主题得到了答案: https://github.com/realm/realm-java/issues/4552
如果您知道从版本N迁移到版本N + 1会抛出此IllegalStateException,则可以根据需要使用DynamicRealm检查版本和deleteRealm。
主题中的更多详细信息。
答案 2 :(得分:0)
在删除领域配置之前添加以下行。
realm.close();