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

how to check if Observable is empty or returns Boolean value

假设我观察到调用 rest api 服务然后将结果存储在数据库中:

public Observable<Boolean> initDB() {
    return this.restApi.feedsEntityList()
        .flatMap(feedEntityList -> this.mNewsCache.saveFeeds(feedEntityList));
}

save Observable 执行数据库保存并且应该 return 在成功的情况下为真或在发生错误的情况下为假:

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();
}

在最后一次观察中,我不确定我是否做对了。即 return 如果数据库保存操作成功完成则为真。 return否则为假!

另外,我应该 return feedEntity 为空吗?

对吗?我应该如何检查 Observable return 是真、假还是空 Observable?

and how should i check if observable returns true, false [...]

当您订阅发出 true 或 false 的 Observable<Boolean> 时,将使用值 true 或 false 调用 onNext(Boolean)

例如:

saveFeed(feeds).subscribe(new Action1<Boolean>() {

    @Override
    public void call(Boolean result) {
        // result will be either true or false.
    }

});

how should i check if observable returns [...] empty Observable

As per the documentation, Observable.empty() 什么都不发出, 然后完成。您的 onNext() 永远不会被调用,但 onComplete() 会被调用。

如果你真的想要,你可以监控是否onNext()被调用,如果你onNext()没有被调用但是onComplete() 是的,你知道它从来没有发射过任何东西。不过,这可能并不是您真正想要的。

in this last observable, i am not sure if i am doing it correctly. i.e. return true if database saving operation is done successfully. return false otherwise!

你不是。

你永远不会调用 subscriber.onNext(false),所以你的 Observable 永远不会发出 false。默认情况下,Observable<Boolean> 不会发出 false - 它根本不会发出任何东西。