获取错误并重新订阅

时间:2016-04-17 01:41:04

标签: java android rx-java

是否可以重新订阅Observable并获取错误?

Observable<T> retry()方法重新订阅了observable,但它消耗了错误。

final PublishSubject<Integer> observable = PublishSubject.create();
observable
    .flatMap(new Func1<Integer, Observable<Integer>>() {

        @Override
        public Observable<Integer> call(final Integer integer) {
            if (integer % 2 == 0) {
                return Observable.just(integer);
            } else {
                return Observable.error(new Exception("int: " + integer));
            }
        }
    })
    .retry()
    .subscribe(new Action1<Integer>() {

                   @Override
                   public void call(final Integer integer) {
                       Timber.i("integer: %d", integer);
                   }
               },
               new Action1<Throwable>() {

                   @Override
                   public void call(final Throwable throwable) {
                       Timber.e(throwable, "throwable");
                   }
               },
               new Action0() {

                   @Override
                   public void call() {
                       Timber.w("onCompleted");
                   }
               });

Observable
    .range(0, 10)
    .delay(2, TimeUnit.MILLISECONDS)
    .subscribe(new Action1<Integer>() {

                   @Override
                   public void call(final Integer integer) {
                       observable.onNext(integer);
                   }
               },
               new Action1<Throwable>() {

                   @Override
                   public void call(final Throwable throwable) {
                       observable.onError(throwable);
                   }
               },
               new Action0() {

                   @Override
                   public void call() {
                       observable.onCompleted();
                   }
               });

永远不会调用onError的{​​{1}}部分,因为observable会消耗错误。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是retryWhen()。这样,您就可以传递Func1 Throwable来提供onError,这意味着您可以将<script> jQuery(document).ready(function($) { $('#your-checkbox').change(function(e) { /* Your ajax call goes here */ }); }); </script> 逻辑放在那里。

这是一个很好的article