RxJava升1级到RxJava 2过程中踩过的一些“坑”

  

  

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      

那么,很不幸你会遇到这样的错误

  

 RxJava 1升级到RxJava 2过程中踩过的一些“坑”“> <br/>
  </p>
  <p>同理,在应用中如果使用了Rxjava2,但是某个第三方的图书馆还在使用Rxjava1也会遇到同样的错误。</p>
  <p>上面的错误是因为RxAndroid 2.0.1本身依赖了RxJava 2.0.1。我们尝试去掉对RxJava的依赖,只留下RxAndroid。还是会遇到问题。</p>
  
  <pre类=   编译的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      

 RxJava 1升级到RxJava 2过程中踩过的一些“坑”“> </p>
  <p>所以使用RxAndroid不能去掉对RxJava的依赖,我是这样使用的。</p>
  
  <pre类=   编译的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调用(ObservabletObservable) {   返回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过程中踩过的一些“坑”