如何使用Android RXJava链接链接的Retrofit调用并返回新的Object模型

时间:2017-07-04 00:37:27

标签: android rx-java rx-android

因此,我们需要进行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中。

1 个答案:

答案 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