我是RxAndroid的新手,我想了解为什么按钮点击事件停止工作。我正在使用RxBinding和Retrofit 2和Observables。
Subscription loginButtonSubscription = RxView.clicks(loginBtn)
.throttleFirst(Constants.CLICK_THRESHOLD_MILLIS, TimeUnit.MILLISECONDS)
.flatMap(aVoid -> authApi.login(new LoginUserRequest(emailEditText.getText().toString(), passwordEditText.getText().toString())))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(verifyEmailResponse -> Log.i("TEST", "onNext: " + verifyEmailResponse.success),
throwable -> handleError(throwable));
如果我收到错误(来自登录改装服务),方法handleError执行得很好,但之后不再触发click事件。
我做错了但我不明白。有更好的方法来处理改造错误吗?
由于
答案 0 :(得分:1)
RxJava链中的任何错误都会导致onError
和onCompleted
事件,这是设计使然。一旦调用了onCompleted事件,就不再订阅您所看到的行为。
在您的情况下,即使Retrofit返回错误,您也希望保持按钮正常工作,这意味着您需要从RxJava查看retry()
运算符。
示例但不保证您需要:
Subscription loginButtonSubscription = RxView.clicks(loginBtn)
.throttleFirst(Constants.CLICK_THRESHOLD_MILLIS, TimeUnit.MILLISECONDS)
.flatMap(aVoid -> authApi.login(new LoginUserRequest(emailEditText.getText().toString(), passwordEditText.getText().toString())))
.doOnError(this::handleLoginError)
.retry()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
verifyEmailResponse -> Log.i("TEST", "onNext: " + verifyEmailResponse.success),
throwable -> handleError(throwable));