RxJava1.0到RxJava2.0踩的坑记录

一、Failed to resolve: io.reactivex:rxjava:2.0.1

原因:2.0的导入名称改了:io.reactivex.rxjava2:rxjava:2.0.1,自己有点想当然了

二、cannot access rx....或其他如cannot access okhttp3...

原因:依赖module中用compile或api,改为implement,或者将代码直接移到app模块中

三、代码各种错,即使按照2.0的来改了还是一直报错

原因:很可能项目当中有别的第三方库仍在依赖rxjava1.0版本,导致1.0和2.0的jar包同时存在,造成类使用错误,记得1.0对应的包名是rx开头,2.0对应的是io.reactivex开头

四、有1.0和2.0的rxjava的jar包同时存在(这也是第三个问题的另一个问题)

* What went wrong:
Execution failed for task ':CorMobiApp:CorMobiEngineProject:transformResourcesWithMergeJavaResForRelease'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/rxjava.properties
      File1: /Users/dev/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.0.1/57f850a6b317e5582f1dbaff10a9e7d7e1fcdcfb/rxjava-2.0.1.jar
      File2: /Users/dev/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.1.5/ece7b5d0870e66d8226dab6dcf47a2b12afff061/rxjava-1.1.5.jar

解决过程:明明已经把compile 'io.reactivex:rxjava:1.1.5'这个注释掉了,怎么还有这个版本的jar包存在,看来是其他第三方框架引用了这个版本的RxJava了,怎么看项目当中jar包的各种互相依赖关系呢?最简单的办法,androidstudio右侧gradle找到这个task执行:

稍等就能在控制台看到了

这里可以看到,843行导入了rxjava2.0.1,845行导入rxandroid引用的也是这个rxjava2.0.1,但是在853行导入retrofit2:adapter引用的却是rxjava1.1.5,所以这里也要升级:

compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'

同时,如果代码里面有RxJavaCallAdapterFactory这个类,要改为RxJava2CallAdapterFactory。

最后,附上最常用写法的变动:

rxjava1.0:

Observable.create(new Observable.OnSubscribe<Boolean>() {
            @Override
            public void call(Subscriber<? super Boolean> subscriber) {
                boolean b = false;
                subscriber.onNext(b);
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Boolean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        
                    }

                    @Override
                    public void onNext(Boolean s) {
                        
                    }
                });

rxjava2.0:

Observable.create(new ObservableOnSubscribe<Boolean>() {
            @Override
            public void subscribe(ObservableEmitter<Boolean> subscriber) {
                boolean b = false;
                subscriber.onNext(b);
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Boolean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onComplete() {

                    }

                    @Override
                    public void onError(Throwable e) {
                       
                    }

                    @Override
                    public void onNext(Boolean s) {
                        
                    }
                });

特别要注意Observable和Schedulers包名的变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值