2015-08-28 108 views
3

我有3個觀察對象可觀察拉鍊爲了

Observable<CharSequence> o1 = RxTextView.textChanges(quitBuddyName); 
Observable<CharSequence> o2 = RxTextView.textChanges(quitBuddyPhone); 
Observable<CircleInviteListAdapter> o3 = RxAdapter.dataChanges(listAdapter); 

Observable.zip(o1, o2, o3, (a, b, c) -> {  
    return a.length() > 0 && b.length() > 0 && c != null; 
}).subscribe(finishBtn::setEnabled); 

問題:爲什麼在我設置適配器第一,然後輸入文本未啓用完成按鈕?

回答

0

無法確定從代碼,但這裏有2個猜測。

1 - 發生錯誤。你沒有做任何事情onError所以如果發生錯誤,你永遠不會知道它。

2 - 你的Observable沒有發射任何東西。同樣,因爲你沒有執行ActiononComplete你不會知道你的Observable是否完成而沒有發射。

正如documentation

注意到它只會發出儘可能多的項目由 源可觀察到發射項目

所以最少發射項目的數量,如果你的來源之一Observables完成不發光,那麼你的zip不會做任何事情,你的Subscribe只是調用onComplete

一般來說,我總是推薦至少實現onNext & onError,並且通常我執行onComplete,即使它只是在debug級別登錄某些東西。

1

您是在combineLatest之後,而不是zip

郵編需要來自的所有結果來源生成一個新的。

CombinationLove觸發器在的源變化後,但只有在所有3個源產生至少一個值後。