RxJava2发布已经有一段时间了,是对RxJava的一次重大的升级,由于我的一个库cv4j使用了RxJava2来尝鲜,但是RxJava2跟RxJava1是不能同时存在于一个项目中的,逼不得已我得把自己所有框架中使用RxJava的地方以及
应用中使用RxJava的地方都升级到最新版本,所以我整理并记录了一些已经填好的坑。分享出来供大家参考学习、下面来看看详细的介绍:
<强> 1。RxJava1跟RxJava2不能共存强>
如果,在同一个模块中同时使用RxJava1和RxJava2,类似如下:
编译的io.reactivex.rxjava2: rxandroid: 2.0.1 编译“io.reactivex.rxjava2: rxjava: 2.0.7” 编译的io.reactivex: rxandroid: 1.2.0 编译的io.reactivex: rxjava: 1.1.5
那么,很不幸你会遇到这样的错误
编译的io.reactivex.rxjava2: rxandroid: 2.0.1//编译“io.reactivex.rxjava2: rxjava: 2.0.7” 编译的io.reactivex: rxandroid: 1.2.0//编译io.reactivex: rxjava: 1.1.5
编译的io.reactivex.rxjava2: rxandroid: 2.0.1 编译“io.reactivex.rxjava2: rxjava: 2.0.7”
官方也是这样解释的
因为RxAndroid版本是少之又少,建议你也 显式依赖> 可观察到的。新建(Observable.OnSubscribe() { @Override 公共空间调用(Subscriber<& # 63;超级String>订阅者){ subscriber.onNext (“hello”); } })。订阅(新的Action1 () { @Override 公共空间调用(字符串){ System.out.println(年代); } });
现在的写法:
可观察到的。新建(ObservableOnSubscribe() { @Override 公共空间订阅(ObservableEmitter {e)抛出异常 e.onNext (“hello”); } })。订阅(新的Consumer () { @Override 公共空间接受(String s) { System.out.println(年代); } });
<强> 5。ObservableOnSubscribe中使用ObservableEmitter发送数据给观察者强>
结合上一条,ObservableOnSubscribe不再使用订户而是用ObservableEmitter替代。
ObservableEmitter可以理解为发射器,是用来发出事件的,它可以发出三种类型的事件,通过调用发射器的<代码> onNext (T值)代码>,<代码> onComplete() 代码>和<代码> onError (Throwable错误)代码>可以分别发出下一个事件,完成事件和错误事件。如果只关心下事件的话,只需单独使用<代码> onNext() 代码>即可。
需要特别注意,发射器的<代码> onComplete() 代码>调用后,消费者不再接收任何未来事件。
<强> 6。可观察到的。变压器变成ObservableTransformer 强>
原先RxJava1的写法:
/* * *跟组成()配合使用,比如ObservableUtils.wrap (obj) .compose (toMain ()) * @param & lt; T> * @return */公共静态& lt; T>Observable.TransformertoMain () { 返回新Observable.Transformer () { @Override 公共Observable 调用(Observable tObservable) { 返回tObservable .subscribeOn (Schedulers.io ()) .observeOn (AndroidSchedulers.mainThread ()); } }; }
现在的写法:
/* * *跟组成()配合使用,比如ObservableUtils.wrap (obj) .compose (toMain ()) * @param & lt; T> * @return */公共静态& lt; T>ObservableTransformertoMain () { 返回新ObservableTransformer () { @Override 公共ObservableSource 应用(Observable 上游){ 返回upstream.subscribeOn (Schedulers.io ()) .observeOn (AndroidSchedulers.mainThread ()); } }; } RxJava升1级到RxJava 2过程中踩过的一些“坑”