如何订阅点击事件,以便例外不取消订阅?

时间:2014-10-02 03:49:07

标签: android rx-java

我正在使用RxJava for Android (RxAndroid),我订阅了一个视图的点击事件,并对它们执行如下操作:

subscription = ViewObservable.clicks(view, false)
    .map(...)
    .subscribe(subscriberA);

问题是只要有异常,subscriberA会自动取消订阅,导致下一次点击不会触发任何内容。

如何处理异常以便拦截所有点击事件而不管抛出异常?

1 个答案:

答案 0 :(得分:2)

使用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)