Skip to content

Instantly share code, notes, and snippets.

@David-Hackro
Last active January 24, 2017 17:31
Show Gist options
  • Save David-Hackro/714b451a3069ff7342c76a766c2b9466 to your computer and use it in GitHub Desktop.
Save David-Hackro/714b451a3069ff7342c76a766c2b9466 to your computer and use it in GitHub Desktop.
Consumir un ServiceA() que retorne una lista de objetos,por cada objeto(Mediante su ID) consumiremos ServiceB(Objeto.Id) el cual retorna detalles del mismo al final se une la resouesta del ServiceA() con ServiceB() en un nuevo Objeto.
//Interface API
public interface api{
@GET("{movie}/{list}")
Observable<GenerosResponse> getAllGeneros(@Path("movie")String movie,@Path("list")String list,@Query("api_key")String key);
@GET("{number}/{movies}")
Observable<ResponseMovies> getAllMovies(@Path("number")int number,@Path("movies")String movies,@Query("api_key")String key, @Query("sort_by")String sort_by);
}
//Pojo -> List Genres Movies
public class GenerosResponse {
private List<Genre> genres;
}
//Pojo Genre -> Detail Genre
public class Genre {
private int id;
private String name;
}
//Pojo -> Lists Movies
public class ResponseMovies {
private int id;
private int page;
private List<Result> results = null;
private int totalPages;
private int totalResults;
}
//Pojo -> this object is combination response the both services
public class CollectionsMovies {
public Genre genres;
public ResponseMovies movies;
}
private Observable<GenerosResponse> makeRequestToServiceA() {
return service.getAllGeneros("movie","list","key"); //some network call
}
private Observable<ResponseMovies> makeRequestToServiceB(Genre genre) {
return service.getAllMovies(genre.getId(),"movies","key","created_at.asc"); //some network call based on response from ServiceA
}
void doTheJob() {
makeRequestToServiceA()
.flatMap(userResponse -> Observable.just(userResponse.getGenres())) //get list from response
.flatMapIterable(baseDatas -> baseDatas)
.flatMap(new Func1<Genre, Observable<? extends ResponseMovies>>() {
@Override
public Observable<? extends ResponseMovies> call(Genre genre) {
return makeRequestToServiceB(genre);
}
}, new Func2<Genre, ResponseMovies, CollectionsMovies>() {
@Override
public CollectionsMovies call(Genre genre, ResponseMovies responseMovies) {
return new CollectionsMovies(genre,responseMovies);
}
}).
subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<CollectionsMovies>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(CollectionsMovies collectionsMovies) {
//Object combinate whit both responses
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment