首页 > 解决方案 > 带有 RxBinding 的 Observable.zip 不返回结果

问题描述

我有两个 EditText,我用两个 observables 听它:

Observable<CharSequence> emailObservable = RxTextView.textChanges(emailNew);
Observable<CharSequence> passwordObservable = RxTextView.textChanges(passwordNew);

当两个值都有效时,我想从该字段中压缩值以执行一些操作。

所以我写道:

Observable.zip(emailObservable, passwordObservable, 
(charSequence, charSequence2) -> "test")
          .subscribe(result -> Timber.e("Result:" + result));

但它仅在第二个字段数据更改时返回结果。当我在第一个字段中输入内容时,它不起作用。

如果我写相同的结果:

emailObservable
    .zipWith(passwordObservable, (email, password) -> email + " " + password)
    .subscribe(result -> Timber.e(result);});

它从第一个字段返回正确的值,但如果我在它上面输入什么也不返回。

答案一定很简单,但现在我不明白我做错了什么。

标签: androidrx-android

解决方案


好的,我替换zipcombineLatest它并以某种方式工作:

Observable.combineLatest(emailObservable, passwordObservable,
                (charSequence, charSequence2) -> new String[]{charSequence.toString(), charSequence2.toString()})
                .subscribe(result -> {
                    boolean isEmailValid = isValidEmail(result[0]);
                    boolean isPasswordValid = isValidPassword(result[1]);
                });

推荐阅读