假设我有observable,call rest api service然后将结果存储在数据库中:
public Observable<Boolean> initDB() {
return this.restApi.feedsEntityList()
.flatMap(feedEntityList -> this.mNewsCache.saveFeeds(feedEntityList) );
}
save Observable执行数据库保存,如果成功则返回true,如果发生错误则返回false:
public Observable<Boolean> saveFeeds(List<FeedEntity> feedEntity) {
if (feedEntity != null) {
return Observable.create(new Observable.OnSubscribe<Boolean>() {
@Override
public void call(Subscriber<? super Boolean> subscriber) {
try {
Log.d("DB: ", "saving Feed to DB");
for (FeedEntity feeds : feedEntity){
feeds.save();
}
subscriber.onNext(true);
subscriber.onCompleted();
} catch (Exception exception) {
subscriber.onError(exception);
}
}
});
} else
return Observable.empty();
}
在最后一个观察中,我不确定我是否正确地做到了。 ie如果成功完成数据库保存操作,则返回true。否则返回假!
另外,我应该返回feedEntity是否为空?
是正确的吗?我应该如何检查observable是否返回true,false或empty Observable?
答案 0 :(得分:6)
我应该如何检查observable是否返回true,false [...]
当您订阅发出true或false的Observable<Boolean>
时,onNext(Boolean)
将被调用,其值为true或false。
例如:
saveFeed(feeds).subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean result) {
// result will be either true or false.
}
});
我应该如何检查observable是否返回空的Observable
As per the documentation,Observable.empty()
一无所获,然后完成。永远不会调用onNext()
,但会调用onComplete()
。
如果真的想要,您可以监控是否调用了onNext()
,如果onNext()
未被调用但是onComplete()
是,则您知道它从未发出任何东西。这可能不是你想要的。
在最后一个观察中,我不确定我是否正确地做到了。 ie如果成功完成数据库保存操作,则返回true。否则返回假!
你不是。
你永远不会打电话给subscriber.onNext(false)
,所以你的Observable永远不会发出false
。 <{1}}默认情况下不会发出Observable<Boolean>
- 它根本不会发出任何内容。