I am trying to use retrofit + rxjava to make nested api calls. I basically have to create List of Library objects. Each library object has a list of authors, and each Author object has a list of books. This is how my json works.
Json library -
{ title: "Library", items: [ { title: "Library1" image: "http://example.com/image/101/image_lib1.png" url: "http://example.com/api/1" }, { title:"Library2" image: "http://example.com/image/101/image_lib2.png" url: "http://example.com/api/2" }, { title:"Library3" image: "http://example.com/image/101/image_lib3.png" url: "http://example.com/api/3" } ] }
And the authors are json-
{ title: "Authors", items: [ { title: "JK Rowling" image: "http://example.com/image/101/image_author1.png" url: "http://example.com/api/101" }, { title:"Mark Twain" image: "http://example.com/image/101/image_author2.png" url: "http://example.com/api/201" }, { title:"Charles Dickens" image: "http://example.com/image/101/image_author3.png" url: "http://example.com/api/301" } ] }
And json books-
{ description: Books, imageurl: "http://example.com/image/101/image_101.png", items: [ { id: 101, title: "Oliver Twist ", description: "some description" }, { id: 1011, title: "Hard times", description: "some more description." } } ] }
The api interface is given below.
@GET("/api/") Observable<LibraryResponse> getLibraryList(); @GET("/api/{feedId}") Observable<AuthorResponse> getAuthorList(@Path("feedId") String feedId); @GET("/api/{feedId}") Observable<BooksResponsee> getBooksList(@Path("feedId") String feedId); Observable<List<Library>> observable = myRestInterface .getLibraryList() .map(a -> a.getItems()) .flatMapIterable(b -> b) .flatMap(h -> myRestInterface .getAuthorList(h.getUrl().substring(h.getUrl().lastIndexOf("/") + 1)) .map(x -> x.getItems()) .flatMapIterable(l -> l) .flatMap(e -> myRestInterface .getBooksList(e.getUrl().substring(e.getUrl().lastIndexOf("/") + 1)) .map(d -> d.getItems()) .flatMapIterable(c -> c))) .collect(// ? into list of main object) .doOnNext(mainObjectList -> new ViewupdateMethod(mainObjectList)); .subscribe(...);
I am trying to create a single Librarylist object that I can use to update my user interface. I'm kinda stuck here. After making several calls, how can I save the results and put everything in a list of library objects?
source share