Observable.error导致崩溃[rxjava1->rxjava2的坑]

示例rxjava1中的代码

Observable.flatmap(new Func1<WisprReplyRoot, Observable<WFTSuccessCode>>() {
            @Override
            public Observable<WFTSuccessCode> call(WisprReplyRoot ret) {
                if (ret == null) {
                    Logger.info("return a null object");
                    return Observable.error(new WisprReturn(WFTErrorCode.WISPR_LOGIN_CONTENT_ERROR));
                })
                return Observable.just(WFTSuccessCode.AUTHENTICATION_SUCCESS);
}
.onErrorResumeNext(wisprOnErrorResumeNext)
.doOnNext(new Action1<WFTSuccessCode>() {
            @Override
            public void call(WFTSuccessCode successCode) {
                
            }
        })
.doOnError(new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                
            }
        }
.subscribe(new Subscriber<WFTSuccessCode>() {
//特别注意rxjava1的Subscriber,这是引起问题的所在,在rxjava1当中运行没有问题,但是rxjava2不能直接借用
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable throwable) {
            if (throwable instanceof WisprReturn) {
                callback.onFailed(error.getErrorCode(), error.getMessage());
            } else {
                callback.onFailed(WFTErrorCode.NETWORK_FAILED, null);
            }
        }

        @Override
        public void onNext(WFTSuccessCode successCode) {
            callback.onSuccess(successCode);
        }
    });

然后看下rxjava2的需要改成如下才可以使用,留意方法

subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError);

因此需要这样改动:

Observable.flatmap(new Function<WisprReplyRoot, Observable<WFTSuccessCode>>() {
        @Override
        public Observable<WFTSuccessCode> call(WisprReplyRoot ret) {
            if (ret == null) {
                Logger.info("return a null object");
                return Observable.error(new  WisprReturn(WFTErrorCode.WISPR_LOGIN_CONTENT_ERROR));
            })
            return Observable.just(WFTSuccessCode.AUTHENTICATION_SUCCESS);
}
.onErrorResumeNext(wisprOnErrorResumeNext)
.doOnNext(new Consumer<WFTSuccessCode>() {
        @Override
        public void call(WFTSuccessCode successCode) {
            
        }
    })
.doOnError(new Consumer<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            
        }
    }
.subscribe(new Consumer() {
            @Override
            public void accept(Object o) throws Exception {
                Log.e(TAG, "O=" + o);
            }
        }, new Consumer<Throwable>() {  //第二个参数相当于onError
            @Override
            public void accept(Throwable throwable) throws Exception {
                Log.e(TAG, "throwable=" + throwable);
            }
        });

注:文章代码不可直接运行,只是项目当中摘过来的部分代码,欢迎指正,谢谢~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容