簡體   English   中英

RxJava為項列表創建可觀察鏈

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM