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,516评论 2 1
  • 学习RxJava,做一下笔记笔记:RxJava(二) 1、描述 RxJava是一个基于事件流的实现异步操作的库,类...
    RoJacKing阅读 579评论 0 2
  • 作者: maplejaw本篇只解析标准包中的操作符。对于扩展包,由于使用率较低,如有需求,请读者自行查阅文档。 创...
    maplejaw_阅读 45,828评论 8 93
  • RxJava和Retrofit的依赖 //rxjava依赖 implementation'io.reactiv...
    慕名66阅读 267评论 0 0
  • 究竟是什么样的仇恨让两个人如此,余生不相往来,甚至丢失了对方的消息,现在想想,似乎也没有什么深仇大恨,而自己开始期...
    北鱼x阅读 312评论 0 1