【发布时间】:2018-03-03 16:43:12
【问题描述】:
我以这种方式将 Realm 与 RxJava 结合使用:
public Flowable<List<EventEntity>> getAll() {
try (final Realm realm = Realm.getInstance(mRealmConfiguration)) {
RealmQuery<RealmEvent> query = realm.where(RealmEvent.class);
Flowable<RealmResults<RealmEvent>> result;
if (realm.isAutoRefresh()) {
result = query
.findAllAsync()
.asFlowable()
.filter(RealmResults::isLoaded);
} else {
result = Flowable.just(query.findAll());
}
return result
.unsubscribeOn(AndroidSchedulers.mainThread());
}
}
我在应用程序的多个位置使用此链。例如:
return Observable.merge(
mEventRepository.getAll()
.toObservable(),
subjectNotificationChange
.flatMapMaybe(notification ->
mEventRepository.getAll()
.firstElement()
)
)
问题是我得到异常:java.lang.IllegalStateException: This Realm instance has already been closed,使其无法使用。
我查看了 RealmObservableFactory 的实现方法,每次调用 subscribe 方法都应该创建新的 Realm 实例。整个情况看起来都是引用计数的问题。
你知道问题出在哪里吗?
【问题讨论】:
-
您是否在其他任何地方手动拨打
realm.close()? -
没有。当我省略对资源的尝试时,一切都可以正常工作。
-
这对我来说真的很奇怪,因为根据代码,我希望它能够工作...... :(
-
好的,等等,等等。您确定您没有在后台线程上收到该错误吗?因为如果 Realm 在没有为线程打开其他实例的情况下关闭,
.just()端将无法工作。 -
添加异常堆栈跟踪可能会有所帮助。