Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Android RXJava链接改造调用并返回新的对象模型_Android_Rx Java_Rx Android - Fatal编程技术网

如何使用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
                    }

                });