Esta instancia de Realm ya se ha cerrado, por lo que es inutilizable + RxJava
En primer lugar, administro la instancia de reino por clase de repositorio:
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);
}
}
Y la única clase que se extiende por este RealmRepository, esta es mi clase de controlador. El problema es cuando ejecuto por primera vez el método en mi fragmento que obtuve:
java.lang.IllegalStateException: esta instancia de Realm ya se ha cerrado, por lo que es inutilizable.
Pero después de este error si el fragmento de recarga funciona bien. Y antes de que este primer fragmento ejecute la llamada al método desde las clases de Servicios y funciona bien. Por ejemplo: este método funciona perfectamente incluso cuando se ejecuta primero:
public Observable<ModuleRealm> getModule(String moduleTitle) {
return execute(realm -> realm.where(ModuleRealm.class)
.equalTo("code", moduleTitle)
.findAllAsync()
.asObservable()
.first()
.map(RealmResults::first));
}
Pero este arroja una excepción:
public Observable<List<ProductCategoryRealm>> getProductCategories() {
return execute(realm -> realm.where(ProductCategoryRealm.class)
.findAll()
.asObservable()
.first()
.map(realm::copyFromRealm));
}