我正在使用RxJava for Android (RxAndroid)我订阅了 View 的点击事件,并对它们执行如下操作:
subscription = ViewObservable.clicks(view, false)
.map(...)
.subscribe(subscriberA);
问题是每当出现异常时,subscriberA
就会自动取消订阅,导致下一次点击不会触发任何内容。
如何处理异常,以便拦截所有点击事件,而不管是否抛出异常?
最佳答案
使用retry
方法:
subscription = ViewObservable.clicks(view, false)
.map(...)
.retry()
.subscribe(subscriberA)
但是,您不会在 onError
中收到任何异常。
要使用重试(重新订阅)逻辑处理异常,请使用 retryWhen
:
subscription = ViewObservable.clicks(view, false)
.map(...)
.retryWhen(new Func1<Observable<? extends Notification<?>>, Observable<?>>() {
@Override
public Observable<?> call(Notification errorNotification) {
Throwable throwable = errorNotification.getThrowable();
if (errorNotification.isOnError() && handleError(throwable)) {
// return the same observable to resubscribe
return Observable.just(errorNotification);
}
// return unhandled error to handle it in onError and unsubscribe
return Observable.error(throwable);
}
private boolean handleError(Throwable throwable) {
// handle your errors
// return true if error handled to retry, false otherwise
return true;
}
}
.subscribe(subscriberA)
关于android - 如何订阅点击事件以便异常情况不会取消订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154236/