2017-07-04 82 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