2017-07-04 34 views
0

所以该方案是一个我们需要做2改装电话,如何使用Android RXJava到链连接改造调用和返回新的对象模型

@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包含“Name”,然后请求2包含“plot”。我想根据这两个字段来构建MovieInformation pojo对象的列表,并将其包装到可观察对象中。

回答

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