首页 文章

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

提问于
浏览
2

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

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

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

Please, answer the question with the help of the code and not with theory only.

1 回答

  • 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));
    }
    

    在这里,您可以将两个将并行执行的服务放在一起 . 我使用了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) {
    
    }}
    

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

相关问题