Last active
January 24, 2017 17:31
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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