我已經創建了兩個不同的API請求與改造2.0作爲如何用RxJava2創建2個或2個並行的網絡請求?
Observable<T> getOrganisationList()
Observable<T> getStaffList()
我使用CompositeDisposable
容器包含多個其他一次性用品。我希望以上兩個可觀察的請求並行執行。
請回答與代碼的幫助的問題,而不是隻有理論。
我已經創建了兩個不同的API請求與改造2.0作爲如何用RxJava2創建2個或2個並行的網絡請求?
Observable<T> getOrganisationList()
Observable<T> getStaffList()
我使用CompositeDisposable
容器包含多個其他一次性用品。我希望以上兩個可觀察的請求並行執行。
請回答與代碼的幫助的問題,而不是隻有理論。
就個人而言,我就是這麼做的(不知道這是做雖然最好的辦法):
public void getEventsComingAndPassed(final Context context, Integer id_user){
Observable<List<Event>> eventsComingObservable = service
.getEventsComing(id_user)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observable<List<Event>> eventsPassedObservable = service
.getEventsPassed(id_user)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observable<NetResponseGetObservableEventsJSON> combined =
Observable.zip(eventsComingObservable, eventsPassedObservable, new Func2<List<Event>, List<Event>, NetResponseGetObservableEventsJSON>() {
@Override
public NetResponseGetObservableEventsJSON call(List<Event> eventsComing, List<Event> eventsPassed) {
return new NetResponseGetObservableEventsJSON(eventsComing, eventsPassed);
}
});
combined.subscribe(new NetResponseGetObservableEvents(context));
}
在這裏,你可以把將並行執行的兩項服務。 我用拉鍊運營商這樣做,更多的信息,你可以檢查的官方documentation。
NetResponseGetObserbableEventJSON是包含在我的情況事件2只列出了一類:
public class NetResponseGetObservableEventsJSON {
List<Event> eventsComing;
List<Event> eventsPassed;
public NetResponseGetObservableEventsJSON(List<Event> eventsComing, List<Event> eventsPassed) {
this.eventsComing = eventsComing;
this.eventsPassed = eventsPassed;
}
public List<Event> getEventsComing() {
return eventsComing;
}
public void setEventsComing(List<Event> eventsComing) {
this.eventsComing = eventsComing;
}
public List<Event> getEventsPassed() {
return eventsPassed;
}
public void setEventsPassed(List<Event> eventsPassed) {
this.eventsPassed = eventsPassed;
}}
最後我已經訂購者類中,你可以處理響應時,兩種服務都做了:
public class NetResponseGetObservableEvents extends Subscriber<NetResponseGetObservableEventsJSON> {
private Context context;
public NetResponseGetObservableEvents(Context context){
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(NetResponseGetObservableEventsJSON response) {
}}
希望它能幫助。 如果有人知道一個更好和正確的方式來做到這一點,我很感興趣!
三江源@Anthony菲利安,MAILLET會發生什麼?其他請求是否還會執行? –
我想這可能幫助您和您解答:https://stackoverflow.com/questions/30822627/error-handling-for-zipped-observables –
我了投票這是這個答案讓我在一定程度上引導。 –
'Flowable.parallel'或'flatMap' –
@DeanXu你是在暗示從Flowable.parallel或flatMap選擇?如果eventsComingObservable或eventsPassedObservable拋出JsonException –