RxJava2+Retrofit2+OkHttp3遇到的问题
程序员文章站
2022-05-09 15:23:30
...
刚开始玩这个。遇到的问题记录下做个笔记。
问题1.transformResourcesWithMergeJavaResForDebug
Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/rxjava.properties
File1: C:\Users\sunny\.gradle\wrapper\dists\gradle-3.3\caches\modules-2\files-2.1\io.reactivex\rxjava\1.1.5\ece7b5d0870e66d8226dab6dcf47a2b12afff061\rxjava-1.1.5.jar
File2: C:\Users\sunny\.gradle\wrapper\dists\gradle-3.3\caches\modules-2\files-2.1\io.reactivex.rxjava2\rxjava\2.0.1\57f850a6b317e5582f1dbaff10a9e7d7e1fcdcfb\rxjava-2.0.1.jar
问题描述;之前使用RxJava1.1.5后来想用下RxJava2,直接就把低版本的给注释掉。
相同的Jar包里边的配置文件冲突了,AS内部bug
解决方式:在build.gradle(app)中Android中加入
Android{
...
packagingOptions {
exclude 'META-INF/rxjava.properties'
}
...
}
问题2:Could not locate call adapter for io.reactivex.Observable<com.example.sunny.fristproject.bean.PickingDetailsBean>
从RxJava1切换到Rxjava2出现的问题;
//compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'//retrofit现在只支持到rxjava1.XX(之前使用)
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'// 这个库可以支持到rxjava2.X(解决问题)
另外:两个依赖切换之后
addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//中RxJavaCallAdapterFactory要切换成
RxJava2CallAdapterFactory
问题3:用RxJava1时书写:
//Rxjava1这样写是没问题的。
Observable detailObservable = (Observable)iUserBiz.getDetailObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<PickingDetailsBean>(){
@Override
public void onCompleted() {);
}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(PickingDetailsBean pickingDetailsBean) {}
});
//
但是换成Rxjava2时。代码就会出错。问题暂时我不知怎我不知道咋描述(有知道的告诉我下。),附张图:
解决方式:
Observable detailObservable = iUserBiz.getDetailObservable();
detailObservable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<PickingDetailsBean>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(PickingDetailsBean value) {}
@Override
public void onError(Throwable e) { }
@Override
public void onComplete() {}
});
暂时这么多,还遇到一些其他问题但是没有及时记录,下面再有的话会一直更新。