RxJava开发学习笔记

1.zip操作符

zip操作符可以用于批量网络请求。等所有数据返回后再对数据进行处理

//获取普通主题和热门主题。2次请求均成功后更新数据集
Observable.zip(getPost(), getHotPost(), new Func2, MyResponse, Boolean>() {
    @Override
    public Boolean call(MyResponse myResponse, MyResponse myResponse2) {
        mData.clear();
            mData.addAll(myResponse.msg);
            mData.addAll(myResponse2.msg);

        return true;
    }
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber() {
    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {
        e.printStackTrace();
    }

    @Override
    public void onNext(Boolean o) {
        mSRL.setRefreshing(false);
        mHomeAdapter.notifyDataSetChanged();
    }
});

2. Do操作符

在Rxjava有很多的doxxx操作符。DoOnNext就是在onNext后面执行,可用于打印log,保存数据等。如果保存数据到数据库,要等到存储完毕,才会执行后面的操作。如果把doOnNext放在子线程中,也需要等到doOnNext执行完成后才执行subscriber

2.1 doOnNext线程切换
  Observable.create(subscriber -> {
        subscriber.onNext(1);
        printThread("create");//RxCachedThreadScheduler-2
    })
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.io())//如果去掉这条doOnNext和create会在同一线程执行
            .doOnNext(o -> printThread("doOnNext"))//RxCachedThreadScheduler-1
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(o -> printThread("subscriber"));//main
}

private void printThread(String name) {
    Log.i(name + "----Thread", Thread.currentThread().getName());
}

References

  • RxJava操作符(六)Utility

你可能感兴趣的:(RxJava开发学习笔记)