Skip to content

Commit d91806b

Browse files
committed
add error retry
1 parent ed4424d commit d91806b

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

app/src/main/java/scut/carson_ho/rxjava_operators/MainActivity.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
import io.reactivex.Observable;
88
import io.reactivex.ObservableEmitter;
99
import io.reactivex.ObservableOnSubscribe;
10+
import io.reactivex.ObservableSource;
1011
import io.reactivex.Observer;
12+
import io.reactivex.annotations.NonNull;
1113
import io.reactivex.disposables.Disposable;
14+
import io.reactivex.functions.Function;
1215

1316

1417
public class MainActivity extends AppCompatActivity {
@@ -26,14 +29,30 @@ public void subscribe(ObservableEmitter<Integer> e) throws Exception {
2629
e.onNext(1);
2730
e.onNext(2);
2831
e.onError(new Exception("发生错误了"));
29-
}
30-
})
31-
.onExceptionResumeNext(new Observable<Integer>() {
32+
e.onNext(3);
33+
}
34+
})
35+
.retryWhen(new Function<Observable<Throwable>, ObservableSource<?>>() {
3236
@Override
33-
protected void subscribeActual(Observer<? super Integer> observer) {
34-
observer.onNext(11);
35-
observer.onNext(22);
36-
observer.onComplete();
37+
public ObservableSource<?> apply(@NonNull Observable<Throwable> throwableObservable) throws Exception {
38+
39+
// 返回新的被观察者 Observable
40+
// 此处有两种情况:
41+
// 1. 原始的Observable不重新发送事件:新的被观察者 Observable发送的事件 = Error事件
42+
// 2. 原始的Observable重新发送事件:新的被观察者 Observable发送的事件 = 数据事件
43+
return throwableObservable.flatMap(new Function<Throwable, ObservableSource<?>>() {
44+
@Override
45+
public ObservableSource<?> apply(@NonNull Throwable throwable) throws Exception {
46+
47+
// 1. 若返回的Observable发送的事件 = Error事件,则原始的Observable不重新发送事件
48+
// 该异常错误信息可在观察者中的onError()中获得
49+
// return Observable.error(new Throwable("retryWhen终止啦"));
50+
51+
// 2. 若返回的Observable发送的事件 = 数据事件,则原始的Observable重新发送事件(若持续遇到错误,则持续重试)
52+
return Observable.just(1);
53+
}
54+
});
55+
3756
}
3857
})
3958
.subscribe(new Observer<Integer>() {
@@ -48,7 +67,8 @@ public void onNext(Integer value) {
4867

4968
@Override
5069
public void onError(Throwable e) {
51-
Log.d(TAG, "对Error事件作出响应");
70+
Log.d(TAG, "对Error事件作出响应" + e.toString());
71+
// 获取异常错误信息
5272
}
5373

5474
@Override

0 commit comments

Comments
 (0)