[英]How to use Android RXJava to chain linked Retrofit calls and return new Object model
因此,在这种情况下,我们需要进行两次改装,
@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方法中将这两个调用链接在一起?
我从这个问题中得到的第二个问题是,我想将这2个调用和Rxjava方法链接在一起,然后根据每个响应中的几个字段返回一个新的可观察到的pojo对象。 例如,假设请求1包含“名称”,然后请求2包含“情节”。 我想根据这两个字段来组成MovieInformation pojo对象的列表,并将其包装成一个可观察的对象。
您应该使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.