流式調(diào)用(比如先調(diào)用注冊--在調(diào)用登錄)
//以下實(shí)現(xiàn)多個網(wǎng)絡(luò)嵌套流式調(diào)用
/* observable1=request.getCall();
observable2=request.getCall_2();
observable1.subscribeOn(Schedulers.io()) // (初始被觀察者)切換到IO線程進(jìn)行網(wǎng)絡(luò)請求1
.observeOn(AndroidSchedulers.mainThread()) // (新觀察者)切換到主線程 處理網(wǎng)絡(luò)請求1的結(jié)果
.doOnNext(new Consumer<Translation1>(){
@Override
public void accept(Translation1 result)throws Exception{
Log.d(TAG,"第1次網(wǎng)絡(luò)請求成功");
result.show();
// 對第1次網(wǎng)絡(luò)請求返回的結(jié)果進(jìn)行操作 = 顯示翻譯結(jié)果
}
})
.observeOn(Schedulers.io()) // (新被觀察者,同時也是新觀察者)切換到IO線程去發(fā)起登錄請求
// 特別注意:因?yàn)閒latMap是對初始被觀察者作變換,所以對于舊被觀察者,它是新觀察者,所以通過observeOn切換線程
// 但對于初始觀察者,它則是新的被觀察者
.flatMap(new Function<Translation1, ObservableSource<Translation2>>(){ // 作變換,即作嵌套網(wǎng)絡(luò)請求
@Override
public ObservableSource<Translation2> apply(Translation1 result)throws Exception{
// 將網(wǎng)絡(luò)請求1轉(zhuǎn)換成網(wǎng)絡(luò)請求2,即發(fā)送網(wǎng)絡(luò)請求2
return observable2;
}
})
.observeOn(AndroidSchedulers.mainThread()) // (初始觀察者)切換到主線程 處理網(wǎng)絡(luò)請求2的結(jié)果
.subscribe(new Consumer<Translation2>(){
@Override
public void accept(Translation2 result)throws Exception{
Log.d(TAG,"第2次網(wǎng)絡(luò)請求成功");
result.show();
// 對第2次網(wǎng)絡(luò)請求返回的結(jié)果進(jìn)行操作 = 顯示翻譯結(jié)果
}
},new Consumer<Throwable>(){
@Override
public void accept(Throwable throwable)throws Exception{
System.out.println("登錄失敗");
}*/
組合調(diào)用--需要同時請求,然后將返回的結(jié)果更新UI
//多個網(wǎng)絡(luò)嵌套
Observable placeObservable = repository.getPlaceList(context);
Observable weatherObservable = ServiceManager.getInstance().getApiService().getWeatherInfo(place, Constants.BAIDU_AK);
Observable.merge(placeObservable, weatherObservable)
.subscribeOn(Schedulers.io())......
public void onNext (Object obj){
//多個請求返回的數(shù)據(jù)對象不一致,要分別判斷并反饋給前臺的UI
if (obj instanceof List) {
mMainView.setupPlaceData((List<Place>) obj);
} else if (obj instanceof WeatherResponse) {
mMainView.setupWeatherData((WeatherResponse) obj);
}
}
總結(jié):網(wǎng)絡(luò)嵌套是Rxjava強(qiáng)大功能中的一角,關(guān)鍵在熟練掌握提供的幾個操作符map 、flatmap、merge等