2016-12-29 2 views
1

Wie gebe ich eine Observable zurück, die nach dem Ausführen eines Webservice-Aufrufs für alle Elemente in einer Liste mehrere Elemente ausgibt?RxJava erstellt eine beobachtbare Kette für die Liste der Elemente

Also habe ich einen Webservice, der zum Beispiel ein einziges "Auto" speichert. Ich erhalte eine Liste von "Autos" von der Benutzeroberfläche und ich möchte alle diese einzeln speichern, aber ich möchte nur 1 Observable abonnieren. Daher möchte ich im Grunde eine Art Kette von mehreren Observablen erstellen, abhängig von der Anzahl der "Autos", die von der Benutzeroberfläche empfangen werden, und ich möchte jedes Ergebnis des Webserviers, das von dem einzelnen Observable ausgegeben wird. Sobald alle "Autos" im Webservice gespeichert sind, kann das einzelne Observable onComplete.

Antwort

0

Ich glaube, Sie nur Observable.form verwenden müssen und wenn Sie Creare erstellen müssen ein Observable pro Auto benutzen Sie einfach den FlatMap-Operator. Sobald Sie fertig sind, müssen Sie nur abonnieren.

@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

I Retrofit bin mit Web-Service mit RxJava wie dies für den Aufruf:

Anfrage:

Observable<ResponsePOJO> getCars(Param param); 

Anruf getCars und Griff Antwort:

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

Ich muss tatsächlich eine Post-Anfrage für eine bestimmte Anzahl von Autos in einer Liste von der Benutzeroberfläche machen –

0

Ich könnte sein, Missverständnis, aber ist dies nicht nur ein Fall, wo Sie von der Liste zu den einzelnen Flatmap können al Gegenstände?

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); 
       } 
      }); 
} 

Damit die OnNext (Car Auto) wird mehrmals und immer dann, wenn die gesamte Liste aufgerufen wird, wird behandelt, OnCompleted() aufgerufen wird. In diesem Beispiel habe ich das Netzwerk als Quelle für meine Liste verwendet, aber ich kann mir vorstellen, dass dies auch die Benutzeroberfläche sein kann.

Ich hoffe, das ist das, was Sie suchen, ansonsten bitte erarbeiten, und ich werde zusammen mit Ihnen denken;)

Verwandte Themen