各路宝宝都看看这个异常:
java.lang.NoClassDefFoundError: io.reactivex.Flowable at io.reactivex.Observable.bufferSize(Observable.java:126) at io.reactivex.Observable.flatMap(Observable.java:7390) at io.reactivex.Observable.flatMap(Observable.java:7357) at io.reactivex.Observable.flatMap(Observable.java:7328) at com.example.rxjavademo.Main2Activity.requsetDataRetry(Main2Activity.java:189) at com.example.rxjavademo.Main2Activity.onClick(Main2Activity.java:97)
你的第一反应是啥?各种百度google,最后呢?如果说我代码没改就好了,你信不?
宝宝心里苦,宝宝不说。我们的电脑不能联网,只能使用jar包或者aar ,所以我下载的离线的rxjava-2.1.1.jar
和rxandroid-2 aar包,那我的build.gradle是这样写的。
compile(name: 'rxandroid-2.0.1', ext: 'aar') compile files('libs/rxjava-2.1.1.jar')我是查了好多资料,可以没有遇到相同情况的?说实话,我是只勤奋的农民工,晚上回到家还要解决这shit bug,
在家里写了测试demo,只是没有联网请求数据,操作符和流程一摸一样。没问题,我想是xutil网络的问题。第二天
到办公室,去掉联网部分,结果还是报错。。。此时一脸懵逼,有木有?一样的代码?这到底是做的啥孽?
怀着感(tong)恩(ku)的心,研究半天还是那样。晚上又对比,一行行对比,还是一样,到家就好,有木有?终于在
过了几天后,我察觉,家里的是依赖网络的插件,于是我把依赖的jar包和aar在家实验了下,结果也挂了,顿时
宝宝无语了。宝宝依赖的插件,
依赖的jar和aar 和联网下载的竟然不一样
compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1'有人会说版本号的问题,我也尝试了把依赖的版本号的aar 和jar下载一样在添加,还是不行。这个不怨我,离线就
是个坑!为那些不能联网的宝宝默哀!
代码就是这样子的
public void requsetDataRetry(BaseRequsetReq req) { Observable.just(req) .subscribeOn(Schedulers.io()) .flatMap(new Function<BaseRequsetReq, ObservableSource<BaseRequsetReq>>() { @Override public ObservableSource<BaseRequsetReq> apply(BaseRequsetReq baseRequsetReq) throws Exception { BaseRequsetReq requset = syncRequset(baseRequsetReq); //网络成功 if (requset.errorBean == null && requset.resultBean!=null) { return Observable.just(requset); } else { //token过期,重试 if (requset.errorBean != null && Constants.ErrorCode_TimeOut.equals(requset.errorBean.resultCode)) { return Observable.error(new TokenOvertimeExeception()); } //网络失败,重试 return Observable.error(new MyRetryException()); } } }).retryWhen(new RetryWithTime()) .observeOn(AndroidSchedulers.mainThread(),false,126) .subscribe(new Observer<BaseRequsetReq>() { @Override public void onSubscribe(Disposable disposable) { } @Override public void onNext(BaseRequsetReq baseRequsetReq) { if (listener != null) {//成功的回掉 listener.onSuccess(baseRequsetReq); } } @Override public void onError(Throwable throwable) { if (listener != null) {//成功的回掉 listener.onError(throwable); } } @Override public void onComplete() {} }); }