1.zip操作符
zip操作符可以用于批量網(wǎng)絡(luò)請(qǐng)求负溪。等所有數(shù)據(jù)返回后再對(duì)數(shù)據(jù)進(jìn)行處理
//獲取普通主題和熱門主題。2次請(qǐng)求均成功后更新數(shù)據(jù)集
Observable.zip(getPost(), getHotPost(), new Func2<MyResponse<Post>, MyResponse<Post>, Boolean>() {
@Override
public Boolean call(MyResponse<Post> myResponse, MyResponse<Post> myResponse2) {
mData.clear();
mData.addAll(myResponse.msg);
mData.addAll(myResponse2.msg);
return true;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Boolean>() {
@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后面執(zhí)行桃漾,可用于打印log舒裤,保存數(shù)據(jù)等蜕劝。如果保存數(shù)據(jù)到數(shù)據(jù)庫忍些,要等到存儲(chǔ)完畢鲁猩,才會(huì)執(zhí)行后面的操作。如果把doOnNext放在子線程中坐昙,也需要等到doOnNext執(zhí)行完成后才執(zhí)行subscriber
2.1 doOnNext線程切換
Observable.create(subscriber -> {
subscriber.onNext(1);
printThread("create");//RxCachedThreadScheduler-2
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())//如果去掉這條doOnNext和create會(huì)在同一線程執(zhí)行
.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());
}