【发布时间】:2017-01-03 16:23:20
【问题描述】:
首先我通过 Repository 类管理领域实例:
public class RealmRepository {
private Lock lock;
protected RealmRepository() {
lock = new ReentrantLock();
}
public <T> T execute(Executor<T> executor) {
Realm realm = null;
try {
lock.lock();
realm = Realm.getDefaultInstance();
return executor.execute(realm);
} finally {
if (realm != null && !realm.isClosed()) {
realm.close();
}
lock.unlock();
}
}
public interface Executor<T> {
T execute(Realm realm);
}
}
并且唯一由这个 RealmRepository 扩展的类,这是我的控制器类。 问题是当我第一次在我得到的片段中执行方法时:
java.lang.IllegalStateException: 这个 Realm 实例已经关闭,无法使用。
但在此错误之后,如果重新加载片段一切正常。在这第一个片段执行从服务类调用的方法之前,它运行良好。 例如: 此方法即使在第一次执行时也能完美运行:
public Observable<ModuleRealm> getModule(String moduleTitle) {
return execute(realm -> realm.where(ModuleRealm.class)
.equalTo("code", moduleTitle)
.findAllAsync()
.asObservable()
.first()
.map(RealmResults::first));
}
但是这个抛出异常:
public Observable<List<ProductCategoryRealm>> getProductCategories() {
return execute(realm -> realm.where(ProductCategoryRealm.class)
.findAll()
.asObservable()
.first()
.map(realm::copyFromRealm));
}
【问题讨论】: