我用Retrofit 2.0创建了两个不同的API请求
Observable<T> getOrganisationList() Observable<T> getStaffList()
我正在使用包含多个其他一次性用品的 CompositeDisposable 容器 . 我希望上述两个可观察请求并行执行 .
CompositeDisposable
Please, answer the question with the help of the code and not with theory only.
就个人而言,我是这样做的(虽然不确定这是最好的方法):
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) { }}
希望能帮助到你 . 如果有人知道更好,更正确的方式,我很感兴趣!
1 回答
就个人而言,我是这样做的(虽然不确定这是最好的方法):
在这里,您可以将两个将并行执行的服务放在一起 . 我使用了zip操作符来做更多信息,你可以查看官方documentation .
NetResponseGetObserbableEventJSON是一个包含我案例中的2个事件列表的类:
最后,我有Subscriber类,您可以在两个服务完成后处理响应:
希望能帮助到你 . 如果有人知道更好,更正确的方式,我很感兴趣!