如何使用RxJava2创建2个或2个并行网络请求?

Anu*_*ngh 2 android rx-java retrofit2 rx-java2

我用Retrofit 2.0创建了两个不同的API请求

Observable<T> getOrganisationList()
Observable<T> getStaffList()
Run Code Online (Sandbox Code Playgroud)

我正在使用CompositeDisposable包含多个其他一次性用品的容器.我希望上述两个可观察请求并行执行.

请在代码的帮助下回答问题,而不仅仅是理论.

Yog*_*ear 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));
}
Run Code Online (Sandbox Code Playgroud)

在这里,您可以将两个将并行执行的服务放在一起.我使用zip操作符来执行此操作,有关更多信息,您可以查看官方文档.

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;
}}
Run Code Online (Sandbox Code Playgroud)

最后,我有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) {

}}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.如果有人知道更好,更正确的方式,我很感兴趣!