因此,我们需要进行2次改装调用,
@GET("/")
Observable<Search> searchMovies(@Query("apikey") String apiKey, @Query("s") String searchKey);
@GET("/")
Observable<Details> getMovie(@Query("apikey") String apiKey, @Query("t") String searchKey);
第一个是获取一个列表,然后对于该列表中的每个项目,我们将进行一个新的调用,以获得有关该电影的更多信息。
所以我的第一个问题是如何在ond rxjava方法中将这两个调用链接在一起?
我从第二个问题得出的结论是,我希望将这两个调用链接在一起,并且Rxjava方法然后根据每个响应中的几个字段返回一个新的可观察pojo对象。例如,假设请求1包含“名称”,然后请求2包含“情节”。我想基于这两个字段组成一个MovieInformation pojo对象的列表,并将其包装到一个observable中。
答案 0 :(得分:0)
您应该使用flatMap运算符来链接这两个调用。
通常getMovie()应该在参数中获取searchMovies()的结果。我想apiKey,searchKey是getMovies(apikey,searchKey)的结果:
yourretrofitservice.searchMovies(apikey,searchKey)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//waiting for response of yourretrofitservice.searchMovies()
.flatMap(new Func1<Search, Observable<Details>>() {
@Override
public Observable<Details> call(Search search_result) {
return yourretrofitservice.searchMovies(apiKey, searchKey); //maybe searchKey = search_result (you should define how to set the result of the First Retrofit call in the second call
}
})
//waiting for the response of yourretrofitservice.getMovie()
.flatMap(new Func1<Search, Observable<YourPojoClass>>() {
@Override
public Observable<YourPojoClass> call(Search search_result) {
//do something with pojo_object
return pojo_object; second call
}
})
.subscribe(new Action1<YourPojoClass>() {
@Override
public void call(YourPojoClass pojo_object) {
//Your final action
}
});
FlatMap运算符:http://reactivex.io/documentation/operators/flatmap.html