9. Rxjava2 : error處理

1. RxJava2 : 什么是觀察者模式
2. RxJava2 : 創建操作符(無關時間)
3. Rxjava2 : 創建操作符(有關時間)
4. Rxjava2 : 變換操作符
5. Rxjava2 : 判斷操作符
6. Rxjava2 : 篩選操作符
7. Rxjava2 : 合并操作符
8. Rxjava2 : do操作符
9. Rxjava2 : error處理
10. Rxjava2 : 重試
11. Rxjava2 : 線程切換

api use
onErrorReturn {{onErrorReturn}}
onErrorResumeNext {{onErrorResumeNext}}
onExpectionResumeNext {{onExpectionResumeNext}

onErrorReturn

  • onErrorReturn
    1.采用指定的值來替換error,示例中采用的是666
    2.onError仍然是終止的標識,采用其他值來替換,最后以onComplete作為終止
Observable.create((ObservableOnSubscribe<Integer>) e -> {
            e.onNext(1);
            e.onError(new NullPointerException());
            e.onNext(2);
        }).onErrorReturn(throwable -> 666)
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.d(TAG, "integer:" + integer);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete");
                    }
                });

log

02-03 15:18:02.628 1869-1869/... D/aaabccc: integer:1
02-03 15:18:02.628 1869-1869/... D/aaabccc: integer:666
02-03 15:18:02.638 1869-1869/... D/aaabccc: onComplete

onErrorResumeNext

  • onErrorResumeNext
    1.和onErrorReturn類似
    2.區別:
    onErrorReturn: 以值來替換
    onErrorResumeNext : 以Observable來替換
Observable.create((ObservableOnSubscribe<Integer>) e -> {
            e.onNext(1);
            e.onError(new Error());
            e.onNext(2);
        }).onErrorResumeNext(throwable -> {
            return Observable.just(666,777);
        })
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.d(TAG, "integer:" + integer);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete");
                    }
                });
    }

log

02-03 15:47:35.608 5890-5890/... D/aaabccc: integer:1
02-03 15:47:35.608 5890-5890/... D/aaabccc: integer:666
02-03 15:47:35.608 5890-5890/... D/aaabccc: integer:777
02-03 15:47:35.608 5890-5890/... D/aaabccc: onComplete

onExpectionResumeNext

  • onExpectionResumeNext
    1.與onErrorReturn和onErrorResumeNext的區別在于,并不是替換掉了error,而是采用重新發送的方式,將原來發送error的位置發送指定的元素
    2.throwable的子類
    exception:
    會起作用,在發生exception的位置發送指定的元素
    error:
    并不會起作用,會和正常方式一樣,在observer的onError中處理
// throwable: Exception
Observable.create((ObservableOnSubscribe<Integer>) e -> {
            e.onNext(1);
            e.onError(new Exception());
            e.onNext(2);
        }).onExceptionResumeNext(new Observable<Integer>() {
            @Override
            protected void subscribeActual(Observer<? super Integer> observer) {
                observer.onNext(666);
                observer.onNext(333);
            }
        })
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.d(TAG, "integer:" + integer);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "error");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete");
                    }
                });

log

02-03 15:47:35.608 5890-5890/... D/aaabccc: integer:1
02-03 15:47:35.608 5890-5890/... D/aaabccc: integer:666
02-03 15:47:35.608 5890-5890/... D/aaabccc: integer:777
02-03 15:47:35.608 5890-5890/... D/aaabccc: onComplete
//throwable : error
Observable.create((ObservableOnSubscribe<Integer>) e -> {
            e.onNext(1);
            e.onError(new Error());
            e.onNext(2);
        }).onExceptionResumeNext(new Observable<Integer>() {
            @Override
            protected void subscribeActual(Observer<? super Integer> observer) {
                observer.onNext(666);
                observer.onNext(333);
            }
        })
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.d(TAG, "integer:" + integer);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "error");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete");

                });

log

02-03 16:24:05.658 11979-11979/... D/aaabccc: integer:1
02-03 16:24:05.658 11979-11979/... D/aaabccc: error
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 怎么如此平靜, 感覺像是走錯了片場.為什么呢, 因為上下游工作在同一個線程呀騷年們! 這個時候上游每次調用emit...
    Young1657閱讀 1,509評論 2 1
  • 學習RxJava,做一下筆記筆記:RxJava(二) 1、描述 RxJava是一個基于事件流的實現異步操作的庫,類...
    RoJacKing閱讀 574評論 0 2
  • 作者: maplejaw本篇只解析標準包中的操作符。對于擴展包,由于使用率較低,如有需求,請讀者自行查閱文檔。 創...
    maplejaw_閱讀 45,821評論 8 93
  • RxJava和Retrofit的依賴 //rxjava依賴 implementation'io.reactiv...
    慕名66閱讀 267評論 0 0
  • 究竟是什么樣的仇恨讓兩個人如此,余生不相往來,甚至丟失了對方的消息,現在想想,似乎也沒有什么深仇大恨,而自己開始期...
    北魚x閱讀 308評論 0 1