[英]RxJava create observable chain for list of items
如何在對列表中的所有項目執行webservice調用后返回將發出多個項目的observable?
所以我有一個網絡服務,可以節省一個單一的“汽車”。 我從UI中檢索“汽車”列表,我想單獨保存所有這些,但我只想訂閱1 Observable。 所以我基本上想要創建一些多個Observable鏈,這取決於從UI收到的“汽車”數量,我希望單個Observable發出的webservie的每個結果。 一旦將所有“汽車”保存在web服務中,單個Observable就可以onComplete。
我正在使用Retrofit來調用RxJava的Web服務,如下所示:
要求:
Observable<ResponsePOJO> getCars(Param param);
調用getCars並處理響應:
client.getCars(param)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Response -> {
// Success
}, e -> {
// Error
});
我可能會誤解,但這不是一個你可以從列表平面映射到單個項目的情況嗎?
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。
我希望這是你正在尋找的,否則,請詳細說明,我會和你一起思考;)
我想你只需要使用Observable.from,如果你需要為每輛車創建一個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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.