2016-12-29 55 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。

我希望这是你在找什么,否则,请详细说明,我会跟你一起想;)