77import io .reactivex .Observable ;
88import io .reactivex .ObservableEmitter ;
99import io .reactivex .ObservableOnSubscribe ;
10+ import io .reactivex .ObservableSource ;
1011import io .reactivex .Observer ;
12+ import io .reactivex .annotations .NonNull ;
1113import io .reactivex .disposables .Disposable ;
14+ import io .reactivex .functions .Function ;
1215
1316
1417public 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