gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:28:39 25 4
gpt4 key购买 nike

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

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

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

请借助代码而不是仅凭理论回答问题。

最佳答案

就我个人而言,我是这样做的(尽管不确定这是最好的方式):

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

最后我有了订阅者类,您可以在其中处理两个服务完成时的响应:

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

}}

希望对您有所帮助。如果有人知道更好更正确的方法,我很感兴趣!

关于android - 如何使用 RxJava2 创建 2 个或两个并行网络请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44322223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com