Próbuję utworzyć obserwowalne przez połączenie wielu aprowizowanych api apofili. Kroki są:Używanie RxJava + Retrofit do tworzenia żądań API dla każdego elementu na liście
- Uzyskaj listę obiektów json przy użyciu wywołania API
- Dla każdego obiektu na liście dokonać innego wywołanie API, aby uzyskać dodatkowe informacje o produkcie
- Zapis danych pobranych z tej nowej szczegółowy obiekt do pliku na dysku (ta występuje dla każdej pozycji na liście)
- Wreszcie zwraca obserwowalne osobnego obiektu, który wymaga, aby plik został utworzony dla każdej z poprzednich obiektów
to co Do tej pory:
public static Observable<DownloadedFiles> downloadFiles() {
DownloadedFiles downloadedFiles = new DownloadedFiles();
Observable.create(subscriber -> {
return getRestService().getObjectList()
.flatMapIterable(objects -> objects)
.flatMap(objectLimited -> getRestService().getObject(objectLimited.getPath()))
.doOnNext(objectFull -> {
try {
File file = new File();
// Extract data from objectFull and write new file to disk
// ...
} catch (IOException e) {
subscriber.onError(e);
}
downloadedFiles.putFile(file);
})
.toList()
.map(objects -> downloadedFiles)
.finallyDo(() -> {
subscriber.onNext(downloadedFiles);
subscriber.onCompleted();
});
});
}
@GET("/api/...")
Observable<List<Object>> getObjectList();
@GET("/api/.../{path}")
Observable<Object> getObject(@Path("path") String path);
Czy ktoś mógłby potwierdzić, że użyłem odpowiednich operatorów. Dzięki .
Trudno powiedzieć, jaki subskrybent jest w twoim przykładzie? – alexwen
@alexwen, przepraszam, że brakowało mi linii. Zmontowałem ten przykład. – user3307102