我正在尝试组合 5 个网络调用来获取所需的对象列表,然后将其显示在 UI 上的单独列表中:
- 苹果
- 香蕉
- 橘子
- 新西兰人
- 梨
按照网络上的一些教程,我创建了 5 个 Observables
并随后合并它们的发射:
Observable<FruitResponse> apples=
_fruits.getApples(store_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
...
Observable<FruitResponse> pears =
_fruits.getPears(store_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
List<Observable<FruitResponse>> observables = new ArrayList();
observables.add(apples);
observables.add(bananas);
observables.add(oranges);
observables.add(kiwis);
observables.add(pears);
Observable
.merge(observables)
.toList()
.single()
.subscribe(new Observer<List<FruitResponse>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<FruitResponse> list) {
ArrayList<Fruit> fruit_list = new ArrayList<Fruits>();
for (FruitResponse f : list) {
fruit_list.get(0).getName()); // -- always different
}
}
});
问题是每次执行代码时发出的对象顺序都不同,我需要按照上述特定顺序获取列表,因此我会知道每个对象与什么相关(苹果列表或bananas 等)并能够正确地将其推送到 Adapter
。
最佳答案
使用 concat()
而不是 merge()
关于java - 合并多个调用保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39863002/