2017-06-02 68 views
2

我已經創建了兩個不同的API請求與改造2.0作爲如何用RxJava2創建2個或2個並行的網絡請求?

Observable<T> getOrganisationList() 
Observable<T> getStaffList() 

我使用CompositeDisposable容器包含多個其他一次性用品。我希望以上兩個可觀察的請求並行執行。

請回答與代碼的幫助的問題,而不是隻有理論。

+0

'Flowable.parallel'或'flatMap' –

+0

@DeanXu你是在暗示從Flowable.parallel或flatMap選擇?如果eventsComingObservable或eventsPassedObservable拋出JsonException –

回答

4

就個人而言,我就是這麼做的(不知道這是做雖然最好的辦法):

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) { 

}} 

希望它能幫助。 如果有人知道一個更好和正確的方式來做到這一點,我很感興趣!

+0

三江源@Anthony菲利安,MAILLET會發生什麼?其他請求是否還會執行? –

+0

我想這可能幫助您和您解答:https://stackoverflow.com/questions/30822627/error-handling-for-zipped-observables –

+0

我了投票這是這個答案讓我在一定程度上引導。 –

相關問題