2016-12-29 105 views
1

如何返回一個observable,它將在對List中的所有項目執行webservice調用後發出多個項目?RxJava創建項目列表的可觀察鏈條

所以我有一個web服務,它可以保存例如一輛「汽車」。我從UI中檢索「汽車」列表,我想單獨保存所有這些,但我只想訂閱1個Observable。所以我基本上希望根據從UI接收到的「汽車」數量創建一些多個Observable鏈,並且我希望單個Observable發出的webservie的每個結果。一旦所有的「汽車」都保存在web服務中,單一的Observable可能會onComplete。

回答

0

我想你只需要使用Observable.form,如果你需要creare創建每輛車的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 
} 
0

我使用改造用於調用Web服務與RxJava這樣的:

請求:

Observable<ResponsePOJO> getCars(Param param); 

呼叫getCars和處理響應:

client.getCars(param) 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(Response -> { 
        // Success 
       }, e -> { 
        // Error 
       }); 
+0

我實際上需要對UI中的一個列表中的一定數量的汽車發佈Post請求 –

0

我可能是誤解,但是,這不僅僅是一個你可以從列表中平面映射到個人的情況al物品?

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(車車)將被調用多次,每當整個列表的處理,onCompleted()被調用。在這個例子中,我使用網絡作爲我的列表的源,但我想這也可以是UI。

我希望這是你在找什麼,否則,請詳細說明,我會跟你一起想;)