为什么这段代码无休止地执行它的.subscribe(..)部分?我假设在找到匹配的Content对象时,只会触发一次事件。但它一遍又一遍地开始。
realm.where(Content.class)
.equalTo("keyID", id)
.findFirst()
.<Content>asObservable()
.map(this::getPostFromContent)
.subscribe(post -> {
loadComments(post.getId());
});
如果我改为.findFirstAsync(),它会抛出异常: “无法访问尚未加载的行,请确保通过调用RealmObject.isLoaded()来加载实例”
我正在使用最新版本的域名。
更新
我能够通过使用:
来完成这项工作realm.where(RealmWrappedContent.class)
.equalTo("keyID", id)
.findFirstAsync()
.<RealmWrappedContent>asObservable()
.filter(post -> post.isLoaded())
.first()
.map(this::getPostFromContent)
.subscribe(post -> {
loadComments(post.getId());
});
但是,为了将realm对象用作可观察对象,你需要编写太多东西。还有更好的办法吗?
答案 0 :(得分:1)
默认行为是每次有更新时提交。在这种情况下,您需要使用filter/first
来获取您发现的1个项目。
如果您想在整个应用中更改该行为,您还可以按照此处所述提供自己的RxObservableFactory
实施:https://realm.io/docs/java/latest/#rxjava。
默认工厂名为RealmObservableFactory
,它应该相当容易包装或提供您自己的实现,以满足您对所有可观察对象的需求。