9.Rxjava2:error 처리

6069 단어
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를 대체합니다. 예시에서 사용한 것은 6662입니다.onError는 여전히 종료된 표지입니다. 다른 값으로 대체하고, 마지막에는 onComplete를 종료합니다
  • Observable.create((ObservableOnSubscribe) e -> {
                e.onNext(1);
                e.onError(new NullPointerException());
                e.onNext(2);
            }).onErrorReturn(throwable -> 666)
                    .subscribe(new Observer() {
                        @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) e -> {
                e.onNext(1);
                e.onError(new Error());
                e.onNext(2);
            }).onErrorResumeNext(throwable -> {
                return Observable.just(666,777);
            })
                    .subscribe(new Observer() {
                        @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) e -> {
                e.onNext(1);
                e.onError(new Exception());
                e.onNext(2);
            }).onExceptionResumeNext(new Observable() {
                @Override
                protected void subscribeActual(Observer super Integer> observer) {
                    observer.onNext(666);
                    observer.onNext(333);
                }
            })
                    .subscribe(new Observer() {
                        @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) e -> {
                e.onNext(1);
                e.onError(new Error());
                e.onNext(2);
            }).onExceptionResumeNext(new Observable() {
                @Override
                protected void subscribeActual(Observer super Integer> observer) {
                    observer.onNext(666);
                    observer.onNext(333);
                }
            })
                    .subscribe(new Observer() {
                        @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
    

    좋은 웹페이지 즐겨찾기