如何在对列表中的所有项目执行webservice调用后返回将发出多个项目的observable?
所以我有一个网络服务,可以节省一个单一的“汽车”。我从UI中检索“汽车”列表,我想单独保存所有这些,但我只想订阅1 Observable。所以我基本上想要创建一些多个Observable链,这取决于从UI收到的“汽车”数量,我希望单个Observable发出的webservie的每个结果。一旦将所有“汽车”保存在网络服务中,单个Observable就可以完成。
答案 0 :(得分:0)
我正在使用Retrofit来调用RxJava的Web服务,如下所示:
请求
Observable<ResponsePOJO> getCars(Param param);
调用getCars并处理响应:
client.getCars(param)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Response -> {
// Success
}, e -> {
// Error
});
答案 1 :(得分:0)
我可能会误解,但这不是一个你可以从列表平面映射到单个项目的情况吗?
public Observable<Car> getCars() {
return api.getCars()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(new Func1<List<Car>, Observable<Car>>() {
@Override public Observable<Car> call(List<Car> carlist) {
return Observable.from(carlist);
}
});
}
这样,onNext(Car car)将被多次调用,每当处理整个列表时,都会调用onCompleted()。在这个例子中,我使用网络作为我的列表的源,但我想这也可以是UI。
我希望这是你正在寻找的,否则,请详细说明,我会和你一起思考;)
答案 2 :(得分:0)
我认为您只需要使用Observable.form,如果您需要为每辆车创建一个Observable,只需使用flatMap运算符。 完成后,您只需订阅即可。
@Test
public void flatMapCars() {
Observable.from(getCars())
.flatMap(this::saveCar)
.subscribe();
}
private List<String> getCars() {
return Arrays.asList("Aston martin", "Renault", "Seat");
}
private Observable<String> saveCar(String car) {
return Observable.just(car);//You should save the car
}