将所有的错误通知传递给一个Observable,以确定是否重新订阅,以及重新订阅的时间.
通过Function 函数接口,返回一个Observable,这个Observable有几项,就表示需要重试几次,而每项发出的时间,就是重试的时间.
private void retryWhen() {
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Throwable {
emitter.onNext("A");
emitter.onNext("B");
emitter.onError(new Throwable("出错了"));
emitter.onNext("C");
.retryWhen(new Function<Observable<Throwable>, ObservableSource<Long>>() {
@Override
public ObservableSource<Long> apply(Observable<Throwable> throwableObservable) throws Throwable {
return Observable.intervalRange(0,3,0,2, TimeUnit.SECONDS);
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@Override
public void onNext(@NonNull String s) {
Log.i(TAG, "retryWhen onNext: " + s);
@Override
public void onError(@NonNull Throwable e) {
Log.i(TAG, "retryWhen onError: " + e.getMessage());
@Override
public void onComplete() {
Log.i(TAG, "retryWhen onComplete" );
});
RxJava是响应式编程(Reactive Extensions)在JVM平台上的实现,即用Java语言实现的一套基于观察者模式的异步编程接口。
1.1 RxJava简述
RxJava是一个在Java虚拟机上,使用可观察的序列构成基于事件的,异步的程序库。
1.2 RxAndroid简述
RxAndroid是基于RxJava开发出的一套适用于Android开发的辅助库。
1.3 设计模式...
http://reactivex.io/RxJava/3.x/javadoc/
https://github.com/ReactiveX/RxJava/wiki/What's-different-in-3.0
implementation 'io.reactivex.rxjava3:rxjava:3.x.y'
implementation 'io.reactivex.rxjava3:rxandroid:3.x.y'
Java 8(来源于官方文档)
Buffer
定期收集 Observable 的数据放进一个数据包裹,然后发射这些数据包裹,而不是一次发射一个值。
如果原来的 Observable 发射了一个 onError 通知,buffer 会立即传递这个通知,而不是首先发射缓存的数据,即使在这之前缓存中包含了原始 Observable 发射的数据。
buffer(count)
每次取count项发射,最后一次发射可能不足count。
Observable.range(1, 10)
.buffer(3)
.subscr
RxJava另一块比较复杂的部分是背压,其中的难点不在于本身,而是背压的表现可能和我们随意畅想的情景不一样,以至于种种的不可理解。先看一个一个基本用法
Observable换成Flowable
Observer换成Subscriber
ObservableOnSubscribe换成FlowableOnSubscribe
ObservableEmitter换成FlowableEmitter
增加一个参数表示背压策略
MISSING
ERROR
BUFFER
LATEST
1、subscribe()
Observable.create(new ObservableOnSubscribe<Integer>() { //创建事件发射器
@Override
public void subscribe(ObservableEmitter<Integer> em...
1.1 用操作符组合Observable
对于ReactiveX来说,Observable和Observer仅仅是个开始,它们本身不过是标准观察者模式的一些轻量级扩展,目的是为了更好的处理事件序列。
ReactiveX真正强大的地方在于它的操作符,操作符让你可以变换、组合、操纵和处理Observable发射的数据。
Rx的操作符让你可以用声明式的风格组合异步操作序列,它拥有...
参考:[Android开发] RxJava2之路七 - 错误处理操作符例子Demo
retry操作符
重试的意思,拦截到错误,然后让 被观察者重新发射数据。Throwable和Exception都额可以拦截
它有五种参数方法:
retry(): 让被观察者重新发射数据,要是一直错误就一直发送了
retry(BiPredicate): interger是第几次重新发送,Throwable是错...
* 即,当发生的异常 = 网络异常 = IO异常 才选择重试
需求2:实现重试
* 通过返回的Observable发送的事件 = Next事件,从而使得retryWhen()重订阅,最终实现重试功能
需求3:延迟1段时间再重试
* 采用delay操作符 = 延迟一段时间发送,以实...
三、RxJava flatMap操作符用法详解
四、RxJava concatMap操作符用法详解
五、RxJava onErrorResumeNext操作符实现app与服务器间token机制
六、RxJava retryWhen操作符...