2015-08-28 105 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个源产生至少一个值后。