1. 程式人生 > >RxJava2+Retrofit2+OkHttp3遇到的問題

RxJava2+Retrofit2+OkHttp3遇到的問題

剛開始玩這個。遇到的問題記錄下做個筆記。

問題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() {}
                });

 暫時這麼多,還遇到一些其他問題但是沒有及時記錄,下面再有的話會一直更新。