RxJava2+Retrofit2+OkHttp3遇到的問題
阿新 • • 發佈:2018-11-04
剛開始玩這個。遇到的問題記錄下做個筆記。
問題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() {}
});
暫時這麼多,還遇到一些其他問題但是沒有及時記錄,下面再有的話會一直更新。