【发布时间】:2019-02-26 07:11:20
【问题描述】:
在我的上一个版本中,我开始遇到以前从未见过的新错误,这些错误出现在几个月未编辑的代码上。
致命异常:java.lang.IllegalStateException 这个 Realm 实例 已经关闭,无法使用。
我有获取数据的 API 调用,然后在 executeTransactionAsync 方法中将内容写入领域,然后在 onSuccess 中查询领域中所有在回调中返回的记录(可能还有其他记录)。
api().getLocalGroups(1).enqueue(new Callback<LocalGroupBase>() {
@Override
public void onResponse(@NonNull Call<LocalGroupBase> call, @NonNull final Response<LocalGroupBase> response) {
try (Realm realm = setupRealm(context)) {
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
realm.copyToRealmOrUpdate(response.body().getResults());
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
callback.onLoaded(LocalGroup.getLocalGroups(realm));
}
});
}
}
@Override
public void onFailure(@NonNull Call<LocalGroupBase> call, Throwable t) {
callback.onError(t.getMessage());
}
});
public static RealmResults<LocalGroup> getLocalGroups(Realm realm) {
return realm.where(LocalGroup.class).findAllSorted("name");
}
它使用资源的 try,所以在 try 语句完成后,领域应该被关闭,但它偶尔会在 getLocalGroups(realm) 中领域查询的 onSuccess 回调中崩溃
这段代码已经有很长一段时间了,现在也发生在另一个地方,所以我对发生了什么变化感到困惑(我更新了 Android 构建工具??)但这也是错误的,领域实际上是否接近- 可以在 onSuccess 内吗?
如果我还在尝试资源,为什么要关闭领域?
这个应用程序目前在 Realm 4.4 上并且已经存在了很长时间。由于一些重大更改,我们还没有时间升级到 5。
【问题讨论】: