RxJava1.X升级到RxJava2.X笔记

来源:互联网 发布:js改变css 编辑:程序博客网 时间:2024/04/29 16:15

Rx1.x和Rx2.x区别

RxJava 2.X + Retrofit + OkHttp 简单示例点这里

library依赖变化

//1.Xcompile 'io.reactivex:rxjava:1.2.1'compile 'io.reactivex:rxandroid:1.2.1'//2.Xcompile 'io.reactivex.rxjava2:rxjava:2.0.0'compile 'io.reactivex.rxjava2:rxandroid:2.0.0'

package变化

变动主要为rx.xxx –> io.reactivex.xxx

//1.Ximport rx.Observable;import rx.Subscription;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;import rx.functions.Action1;//2.Ximport io.reactivex.Observable;import io.reactivex.ObservableSource;import io.reactivex.ObservableTransformer;import io.reactivex.disposables.Disposable;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.schedulers.Schedulers;import io.reactivex.functions.Consumer;

null值

RxJava 2.X不再支持null值,如果传入一个null会抛出NullPointerException

Observable.just(null);Single.just(null);Observable.fromCallable(() -> null)    .subscribe(System.out::println, Throwable::printStackTrace);Observable.just(1).map(v -> null)    .subscribe(System.out::println, Throwable::printStackTrace);

案例1

//1.Xpublic static final Observable.Transformer IO_TRANSFORMER = new Observable.Transformer() {    @Override public Object call(Object observable) {        return ((Observable) observable).subscribeOn(Schedulers.io())                                        .unsubscribeOn(Schedulers.io())                                        .observeOn(Schedulers.io());    }};public static final <T> Observable.Transformer<T, T> applySchedulers(Observable.Transformer transformer){    return (Observable.Transformer<T, T>)transformer;}Action1<Integer> onNext = null;String[] items = { "item1", "item2", "item3" };Subscription subscription = Observable.from(items)                                      .compose(RxUtil.<String>applySchedulers(IO_TRANSFORMER))                                      .map(new Func1<String, Integer>() {                                                  @Override public Integer call(String s) {                                                      return Integer.valueOf(s);                                                  }                                              })                                      .subscribe(onNext);//TODO subscription.unsubscribe();   //2.Xpublic static final ObservableTransformer IO_TRANSFORMER = new ObservableTransformer() {    @Override public ObservableSource apply(Observable upstream) {        return upstream.subscribeOn(Schedulers.io())                       .unsubscribeOn(Schedulers.io())                       .observeOn(Schedulers.io());    }};public static final <T> ObservableTransformer<T, T> applySchedulers(ObservableTransformer transformer){    return (ObservableTransformer<T, T>)transformer;}Consumer<Integer> onNext = null;String[] items = { "item1", "item2", "item3" };Disposable disposable = Observable.fromArray(items)                                  .compose(RxUtil.<String>applySchedulers(IO_TRANSFORMER))                                  .map(new Function<String, Integer>() {                                              @Override public Integer apply(String s) throws Exception {                                                  return Integer.valueOf(s);                                              }                                          })                                  .subscribe(onNext);//TODO disposable.dispose();
  • .subscribe(…)返回值的变化:1.X为Subscription, 2.X为Disposable

- Transformer的变化:1.X为rx.Observable内部的Transformer接- 口, 继承自Func1

- AndroidSchedulers的变化: 1.X为rx.android.schedulers.AndroidSchedulers, 2.X为io.reactivex.android.schedulers.AndroidSchedulers

  • Func1的变化: 1.X为rx.functions.Func1, 2.X为io.reactivex.functions.Function

  • 其它重载方法见下方截图

这里写图片描述

这里写图片描述

案例2

//1.Xpublic class AppBaseActivity extends AppCompatActivity {    ...    private CompositeSubscription mCompositeSubscription;    protected void addSubscription(Subscription subscription) {        if (null == mCompositeSubscription) {            mCompositeSubscription = new CompositeSubscription();        }        mCompositeSubscription.add(subscription);    }    @Override protected void onDestroy() {        if (null != mCompositeSubscription) {            mCompositeSubscription.unsubscribe();        }        super.onDestroy();    }    ...}//2.Xpublic class AppBaseActivity extends AppCompatActivity {    ...    private   CompositeDisposable mCompositeDisposable;    protected void addDisposable(Disposable disposable) {        if (null == mCompositeDisposable) {            mCompositeDisposable = new CompositeDisposable();        }        mCompositeDisposable.add(disposable);    }    @Override protected void onDestroy() {        if (null != mCompositeDisposable) {            mCompositeDisposable.clear();        }        super.onDestroy();    }    ...}

从零开始的RxJava2.0教程(四)在安卓中的应用

[置顶] RxJava,Rxandroid 2.0的使用方式

Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架

Retrofit + RxJava + OkHttp 让网络请求变的简单-基础篇

Retrofit + RxJava + OkHttp 让网络请求变的简单-封装篇

给 Android 开发者的 RxJava 详解

我所理解的RxJava——上手其实很简单(一)

RxJava 的使用入门