gpt4 book ai didi

java - 如何使用响应式 android 和 Retrofit 发出多个请求

转载 作者:行者123 更新时间:2023-12-02 03:12:40 29 4
gpt4 key购买 nike

我有一个调用 getShops() 方法的演示者。

Observable<List<Shop>> observable = interactor.getData();
Subscription subscription = observable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Shop>>() {
@Override
public void onCompleted() {
view.hideProgress();
}

@Override
public void onError(Throwable e) {
super.onError(e);
view.hideProgress();
}

@Override
public void onNext(List<Shop> shops) {
handleShops(shops);
view.onSuccess();
}
});
composite.add(subscription);

在数据层中,我有 Interactor,它通过 Retrofit 向服务器发出请求并返回 List<Shop> .

@Override
public Observable<List<Shop>> getData() {
return api.getShops(pageNum).map(new Func1<ShopWrapper, List<Shop>>() {
@Override
public List<Shop> call(ShopWrapper wrapper) {
return wrapper.getShops();
}
});
}

问题是我需要使用不同的页面参数发出多个相同的请求,因为服务器每页返回 N 个商店,我需要收集所有商店,然后返回 Observable<List<Shop>>给演示者。

我是响应式(Reactive)编程的新手,也许有一些运算符允许执行此操作。

如有任何帮助,我们将不胜感激。

最佳答案

只需使用 Observable.rangeconcatMap 进行调用即可。如果您不知道上限,可以在某些条件下使用 takeUntil

类似这样的事情:

Observable.range(0, Integer.MAX_VALUE)
.concatMap(pageNum -> api.getShops(pageNum).map(doYourMapping))
.takeUntil(shops -> someCondition);

如果您只需要一次 onNext 调用,您可以在 takeUntil 之后添加此调用:

.flatMapIterable(shops -> shops)
.toList();

关于java - 如何使用响应式 android 和 Retrofit 发出多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40807728/

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