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