Android函数响应式编程——必学的RxJava错误处理操作符catch、retry
来源:互联网 发布:淘宝网跑步机 编辑:程序博客网 时间:2024/05/21 09:59
为什么要拦截异常?
因为错误出现的时候会调用Subscriber的onError方法把错误分发出去,由SubsCriber自己来处理错误。但是如果每个Subscriber都处理一遍的话,工作量就太大了,这时候可以使用错误处理操作符,这时候可以使用错误处理操作符(?)。
1.catch
onErrorReturn:Observable遇到错误会发射一个特殊的值出去并调用观察者的onCompleted方法。
onErrorReturnNext:Observable遇到错误会发射备用Observable的数据。
onExceptionResumeNext:和上一个类似。区别在于,如果onError收到的Throwable不是一个Exception,它会把错误传递给观察者的onError,不会使用备用的Observable。
这里以第一个举例。
大于2的时候会抛出异常,这个时候就输出了onErrorReturn里的值并且调用了onCompleted方法。(原来的Observable就不管了)
rx.Observable.create(new rx.Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { for (int i = 0; i < 5; i ++) { if (i > 2) { subscriber.onError(new Throwable("Throwable")); } subscriber.onNext(i); } subscriber.onCompleted(); }}).onErrorReturn(new Func1<Throwable, Integer>() { @Override public Integer call(Throwable throwable) { return 6; }}).subscribe(new rx.Observer<Integer>() { @Override public void onCompleted() { Log.i("xbh", "onCompleted: "); } @Override public void onError(Throwable e) { Log.i("xbh", "onError: " + e.getMessage()); } @Override public void onNext(Integer integer) { Log.i("xbh", "onNext: " + integer); }});
输出
12-09 13:51:19.340 27536-27536/? I/xbh: onNext: 0
12-09 13:51:19.340 27536-27536/? I/xbh: onNext: 1
12-09 13:51:19.340 27536-27536/? I/xbh: onNext: 2
12-09 13:51:19.340 27536-27536/? I/xbh: onNext: 6
12-09 13:51:19.340 27536-27536/? I/xbh: onCompleted:
2.retry就是重新执行,这里retry(2)就是重复从开头再执行两遍
rx.Observable.create(new rx.Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { for (int i = 0; i < 5; i ++) { if (i == 1) { subscriber.onError(new Throwable("Throwable")); } else { subscriber.onNext(i); } } subscriber.onCompleted(); }}).retry(2).subscribe(new rx.Observer<Integer>() { @Override public void onCompleted() { Log.i("xbh", "onCompleted: "); } @Override public void onError(Throwable e) { Log.i("xbh", "onError: " + e.getMessage()); } @Override public void onNext(Integer integer) { Log.i("xbh", "onNext: " + integer); }});
输出
12-09 13:53:14.639 29294-29294/com.hdu.a15058124.homework3 I/xbh: onNext: 0
12-09 13:53:14.640 29294-29294/com.hdu.a15058124.homework3 I/xbh: onNext: 0
12-09 13:53:14.640 29294-29294/com.hdu.a15058124.homework3 I/xbh: onNext: 0
12-09 13:53:14.640 29294-29294/com.hdu.a15058124.homework3 I/xbh: onError: Throwable
- Android函数响应式编程——必学的RxJava错误处理操作符catch、retry
- Android函数响应式编程——必学的RxJava创建操作符create、just、from、interval、range、repeat
- Android函数响应式编程——必学的RxJava组合操作符startWith、merge、concat、zip、combineLastest
- Android函数响应式编程——必学的RxJava辅助操作符delay、Do、subscribeOn、observeOn、timeout
- Android函数响应式编程——必学的RxJava转换操作符toList、toSortedList、toMap
- Android函数响应式编程——必学的RxJava条件操作符和布尔操作符all、contains、isEmpty、amb、defaultIfEmpty
- Android函数响应式编程——必学的RxJava变换操作符map、flatMap、cast、concatMap、flatMapIterable、buffer、groupBy
- Android函数响应式编程——必学的RxJava过滤操作符filter、elementAt、distinct、skip、take、ignoreElements、throttleFirst
- Android函数响应式编程——RxJava的4大subject和线程控制
- RX操作符之错误处理(catch[onErrorReturn、onErrorResumeNext、onExceptionResumeNext]、retry、retryWhen)
- Android函数响应式编程最新RxJava-操作符入门(1)
- Android函数响应式编程最新RxJava-操作符入门(2)
- 7.5 Error Handling 错误处理 - Catch/Retry
- Android函数响应式编程——RxJava不完整定义回调,更灵动的观察者写法
- RxJava响应式函数编程
- RxJava响应式函数编程
- Android函数响应式编程——RxJava最快速度入门
- 一、Rxjava从头学:响应式编程
- python之迭代器和生成器
- Maplab框架介绍(一)
- bzoj3495 PA2010 Riddle(2-SAT 前缀优化建边)
- 基于ubuntu(阿里云)的nginx+uwsgi+django的服务器搭建(到处是坑)
- django为了解决同一个项目不同app下Templates冲突的解决方法
- Android函数响应式编程——必学的RxJava错误处理操作符catch、retry
- C扩展语法一:语句内嵌表达式
- 不用功能键进入BIOS
- 树莓派(RPi) CentOS7安装Nginx
- java基本数据类型
- 小笔记 DLL导出 和 Lib引用
- Python Bool加减后变int
- 字符串去重---试试手
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数