我已经使用Retrofit 2.0创建了两个不同的API请求
Observable<T> getOrganisationList()
Observable<T> getStaffList()
我正在使用包含多个其他一次性用品的CompositeDisposable
容器。我希望上述两个可观察请求并行执行。
请在代码的帮助下回答问题,而不仅仅是理论。
答案 0 :(得分:5)
就个人而言,我是这样做的(虽然不确定这是最好的方法):
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));
}
在这里,您可以将两个将并行执行的服务放在一起。 我使用zip操作符来执行此操作,有关更多信息,您可以查看官方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;
}}
最后,我有了Subscriber类,您可以在两个服务完成后处理响应:
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) {
}}
希望它有所帮助。 如果有人知道一个更好,更正确的方式,我很感兴趣!