java - 收到错误并重新订阅

标签 java android rx-java

是否可以重新订阅 Observable 并收到错误?

Observable<T> retry() 方法重新订阅可观察对象,但它消耗了错误。

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部分observable从未被调用,因为 .retry()消耗错误。

最佳答案

您正在寻找的是 retryWhen() 。这允许您传递一个 Func1,它为您提供 Throwable,这意味着您可以将 onError 逻辑放在那里。

这是一个很好的article .

关于java - 收到错误并重新订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36671783/

相关文章:

java - 为什么我的计数器在每次循环执行代码后没有增加?

java - Android:SQLite 说列不存在

java - Android不允许过渡多个fragment :

android - 使用 Google Map API V2 查找 map 上两点之间的距离

java - 如何在 RxJava Vert.x 中结束链式 http 请求?

java - 将特定字符串映射到常量整数?

java - 使用 Java OAuth 进行购物的内容 API

java - 复杂类型的通用数组

android - RxJava单: flatMap if false

kotlin - 在条件下可观察到的开关