【发布时间】:2016-06-02 13:55:36
【问题描述】:
为什么这段代码无休止地执行它的 .subscribe(..) 部分?我假设该事件只会被触发一次,当找到匹配的内容对象时。但它会一遍又一遍地开始。
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());
});
但是为了将领域对象用作可观察对象,您需要编写的东西太多了。有没有更好的办法?
【问题讨论】:
-
我假设您在第一种情况下每次底层领域发生变化时都会收到一个事件,顺便说一句,请阅读docs on using
asObservable()