我有两个EditText,我用两个可观察对象来监听它:
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);});
它从第一个字段返回正确的值,但是如果我在上面输入任何内容,则不返回任何内容。
答案一定很简单,但是现在我不明白我做错了什么。
答案 0 :(得分:0)
好的,我将zip
替换为combineLatest
,它以某种方式起作用:
Observable.combineLatest(emailObservable, passwordObservable,
(charSequence, charSequence2) -> new String[]{charSequence.toString(), charSequence2.toString()})
.subscribe(result -> {
boolean isEmailValid = isValidEmail(result[0]);
boolean isPasswordValid = isValidPassword(result[1]);
});