【问题标题】:How to subscribe to click events so exceptions don't unsubscribe?如何订阅点击事件以便异常不会取消订阅?
【发布时间】:2014-10-02 03:49:06
【问题描述】:

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

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

问题是每当出现异常时,subscriberA 会自动取消订阅,导致下次点击不会触发任何内容。

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

【问题讨论】:

    标签: android rx-java


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2012-03-14
    • 1970-01-01
    • 2015-08-24
    • 2018-01-05
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    相关资源
    最近更新 更多