我有一个带有 Observable 的登录屏幕,它在电子邮件和密码有效时发出项目,然后我订阅启用或禁用登录按钮。
现在,我想要一种方法来避免多次单击登录按钮(避免多次调用 web 服务并在登录后打开多个活动)。
我尝试使用 doOnNext() 禁用按钮,但它与我的验证冲突(我最终无法启用按钮)
我的代码:
InitialValueObservable<CharSequence> emailChangeObservable = RxTextView.textChanges(binding.tietLoginLogin);
InitialValueObservable<CharSequence> passwordChangeObservable = RxTextView.textChanges(binding.tietLoginPassword);
Observable<Boolean> infoValidStream = Observable.combineLatest(emailChangeObservable, passwordChangeObservable, (email, password) -> {
boolean validEmail = email.length() > 3 && email.toString().contains("@");
boolean validPass = password.length() > 1;
return validEmail && validPass;
});
infoValidStream.subscribe(validEmailAndPass -> binding.btLoginSignIn.setEnabled(validEmailAndPass));
RxView.clicks(binding.btLoginSignIn)
.subscribe(o -> login()); // do the request to the webservice and return a Single<User> if success.
我怎样才能实现这种行为?