欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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时。代码就会出错。问题暂时我不知怎我不知道咋描述(有知道的告诉我下。),附张图:

RxJava2+Retrofit2+OkHttp3遇到的问题

 解决方式:

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

 暂时这么多,还遇到一些其他问题但是没有及时记录,下面再有的话会一直更新。