如何检查Observable是否为空或返回布尔值

时间:2015-12-21 17:57:18

标签: android rx-java rx-android

假设我有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?

1 个答案:

答案 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 documentationObservable.empty() 一无所获,然后完成。永远不会调用onNext(),但会调用onComplete()

如果真的想要,您可以监控是否调用了onNext(),如果onNext()未被调用但是onComplete()是,则您知道它从未发出任何东西。这可能不是你想要的。

  

在最后一个观察中,我不确定我是否正确地做到了。 ie如果成功完成数据库保存操作,则返回true。否则返回假!

你不是。

你永远不会打电话给subscriber.onNext(false),所以你的Observable永远不会发出false。 <{1}}默认情况下不会发出Observable<Boolean> - 它根本不会发出任何内容。