如何使用Android RXJava链接改造调用并返回新的对象模型
所以我们需要打两次改装电话如何使用Android RXJava链接改造调用并返回新的对象模型,android,rx-java,rx-android,Android,Rx Java,Rx Android,所以我们需要打两次改装电话 @GET("/") Observable<Search> searchMovies(@Query("apikey") String apiKey, @Query("s") String searchKey); @GET("/") Observable<Details> getMovie(@Query("apikey") String apiKey, @Query("t") String searchKey); @GET(“/”) 可观察的
@GET("/")
Observable<Search> searchMovies(@Query("apikey") String apiKey, @Query("s") String searchKey);
@GET("/")
Observable<Details> getMovie(@Query("apikey") String apiKey, @Query("t") String searchKey);
@GET(“/”)
可观察的searchMovies(@Query(“apikey”)字符串apikey,@Query(“s”)字符串searchKey);
@获取(“/”)
可观察的getMovie(@Query(“apikey”)字符串apikey,@Query(“t”)字符串searchKey);
第一个是获得一个列表,然后对于列表中的每个项目,我们将打一个新的电话,以便获得关于该电影的更多信息
所以我的第一个问题是如何在ond rxjava方法中将这两个调用链接在一起
第二个问题是,我想在Rxjava方法内部将这两个调用链接在一起,然后根据每个响应中的几个字段返回一个新的可观察的pojo对象。例如,假设请求1包含“Name”,然后请求2包含“plot”。我想根据这两个字段组成一个movieinformationpojo对象列表,并将其包装成一个可观察对象 您应该使用flatMap操作符链接这两个调用 通常,getMovie()应该接受searchMovies()结果的参数。我假设apiKey,searchKey是getMovies的结果(apiKey,searchKey):
yourservice.searchMovies(apikey,searchKey)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//正在等待服务的响应。searchMovies()
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(搜索结果){
返回您的改装服务。searchMovies(apiKey,searchKey);//可能searchKey=search\u result(您应该定义如何在第二次调用中设置第一次改装调用的结果
}
})
//正在等待服务的响应。getMovie()
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(搜索结果){
//用pojo_对象做些什么
返回pojo_对象;第二次调用
}
})
.订阅(新操作1(){
@凌驾
public void调用(YourPojoClass pojo_对象){
//你的最后行动
}
});
平面地图操作员:
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
}
});