【发布时间】:2017-12-09 14:20:31
【问题描述】:
我正在关注this code 进行一些错误验证。这是 combineLatest 实现,它接受来自 3 个字段的输入并对每个字段进行错误验证。
Flowable.combineLatest(
_emailChangeObservable,
_passwordChangeObservable,
_numberChangeObservable,
(newEmail, newPassword, newNumber) -> {
boolean emailValid = !isEmpty(newEmail) && EMAIL_ADDRESS.matcher(newEmail).matches();
if (!emailValid) {
_email.setError("Invalid Email!");
}
boolean passValid = !isEmpty(newPassword) && newPassword.length() > 8;
if (!passValid) {
_password.setError("Invalid Password!");
}
boolean numValid = !isEmpty(newNumber);
if (numValid) {
int num = Integer.parseInt(newNumber.toString());
numValid = num > 0 && num <= 100;
}
if (!numValid) {
_number.setError("Invalid Number!");
}
return emailValid && passValid && numValid;
})
.subscribe(_disposableObserver);
我的问题是,除非所有 3 个输入字段 observables 至少发出一次,否则不会触发组合器功能。因此,当用户输入错误的电子邮件地址时,直到他们在所有 3 个字段中输入了一些数据后才会收到通知。
【问题讨论】:
-
你刚刚尝试运行 RxJava-Android-Samples 代码吗?还是在此基础上编写新代码?
-
我正在使用相同的代码进行学习。没有修改。如果您看到链接的代码,如果我从 Flowables 中删除了 skip(1) 调用,那么我可以根据需要收到错误通知 - 但是一旦我启动片段就会有错误通知(没有任何用户输入)。
标签: rx-java rx-android rx-java2