2015-12-21 124 views
1

可以說我有調用REST API服務可觀察到的,然後將結果存儲在數據庫中:如何檢查可觀察爲空或返回布爾值

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

保存可觀察執行數據庫保存,並應在返回true在錯誤的情況下成功或錯誤的情況發生了:

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

在這最後一個可觀察,我不知道我是否做正確。即如果數據庫保存操作成功完成,則返回true。否則返回false!

另外,我是否應該返回feedEntity爲空?

是否正確?我應該如何檢查observable是否返回true,false或空Observable?

回答

6

,我應該如何檢查,如果觀察到的回報真的,假的[...]

當您訂閱的Observable<Boolean>發出真或假,onNext(Boolean)將與值或者叫做對或錯。

例如:

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

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

}); 

我應該如何檢查,如果觀察到的回報[...]空可觀察

As per the documentationObservable.empty()發出什麼都沒有,然後完成。您的onNext()將永遠不會被調用,但將調用onComplete()

如果你真的想,你可以監視onNext()是否被調用,如果你onNext()不叫,但onComplete()是,你知道它永遠不會發出任何東西。這可能不是你想要的。

在這最後可觀察到,我不知道如果我做得對。即如果數據庫保存操作成功完成,則返回true。否則返回false!

你不是。

你永遠不會打電話給subscriber.onNext(false),所以你的Observable永遠不會發出false。默認情況下,Observable<Boolean>不會發出false - 它根本不會發出任何東西。

+0

很好...指的是第一個觀察者..是否會在flatMap轉換後終止?在其他世界中,在保存數據後,該觀察者會發生什麼? – Fshamri

+1

每當從第一個Observable調用'onNext()'時,'flatMap()'中的函數都會被調用。一旦你的'saveFeeds()'Observable完成,整個鏈將完成,因爲這是鏈中的最後一個Observable。 –

+0

現在很清楚....感謝您的幫助和明確的解釋。 – Fshamri