Wir verwenden ReactiveX und Retrofit in unserem Netzwerk-Stack, um alle API-Anfragen asynchron zu bearbeiten.Wie können mehrere Anfragen zum Auffüllen von Modellen mit RXJava Observables behandelt werden?
Unser Ziel ist es, eine Methode zu erstellen, die eine vollständig aufgefüllte Sammlung von User
Modellen zurückgibt. Jedes User
Modell hat eine Liste von Pet
Objekten. Wir können alle User
Modelle mit einer Anfrage abholen. Die Modelle Pet
müssen jedoch unter User
angefordert werden.
Erster Anwender ist einfach:
// Service.java
@GET("users/?locationId={id}")
Observable<List<User>> getUsersForLocation(@Path("id") int locationId);
@GET("pets/?userId={id}")
Observable<List<Pet>> getPetsForUser(@Path("id") int userId);
// DataManager.java
public Observable<List<User>> getUsersForLocation(int locationId) {
return api.getUsersForLocation(locationId);
}
public Observable<List<Pet>> getPetsForUser(int userId) {
return api.getPetsForUser(userId);
}
Wir möchten etwas bequeme (RX-Stil) Art und Weise der Schleife durch die User
Liste finden, holt die Pet
s für die einzelnen Benutzer, um sie zu den User
zuweisen und schließlich die Observable<List<User>>
zurückgeben.
Ich bin ziemlich neu in RX. Ich habe mir die Dokumentation angeschaut und verschiedene Methoden wie flatMap()
und zip
ausprobiert, allerdings muss ich noch die genaue Kombination von Transformationen oder Combinern finden, um das zu erreichen.
In dieser Präsentation tut Jake Wharton genau das: https://goo.gl/01Evkm – rciovati
Danke für den Link. Ich verwende derzeit Java 7 und die Verwendung von Lambdas in dieser Präsentation verdeckt, was in diesen Methodenaufrufen an flatMap() geschieht. Irgendwelche Einsichten? – JeremyFromEarth