2017-01-02 194 views
-1

我有一個服務名爲verifyData。我需要撥打這個服務N次。使用Retrofit和RXJava的多個請求

  • 改造2
  • RXJava

服務

@FormUrlEncoded 
    @POST("verifyData") 
    Observable<Adeudos> Adeudos(
      @Field("id") int id_user  
    ); 

簡單的通話

Observable<Adeudos> respuesta = services.verifyData(1); 
respuesta.subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<Adeudos>() { 
        @Override 
        public void onCompleted() { 
        } 

        @Override 
        public void onError(Throwable e) { 

        } 

        @Override 
        public void onNext(Adeudos adeudos) { 

        } 
       }); 

我需要執行此 「方法」 usign這陣

List<String> ids = new ArrayList(); // 1,2,3,4,5,6,7 

SOLUTION

在我gradle這個添加retrolambda

的Java

Observable.from(ids) 
       .flatMap(s -> services.verifyData(ids).subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<Adeudos>() { 
        @Override 
        public void onCompleted() { 
         Log.e("Completed :"," Completed\n");  
        } 

        @Override 
        public void onError(Throwable e) { 
         Log.e("SplashInteractorImpl :  ",e.getMessage()+"\n"); 

        } 

        @Override 
        public void onNext(Adeudos adeudos) { 
         Log.e("SplashInteractorImpl :  ",adeudos.getMessage()+"\n"); 
        } 
       }); 
+0

你應該可以用'Observable.zip()'做到這一點' –

回答

2

如果你想順序呼叫,使用.concatMap

Observable.from(ids) 
      .concatMap(s -> services.verifyData(Integer.parseInt(s))) 
      //subscription 

如果你想並行調用,使用flatMap()maxConcurrent參數

Observable.from(ids) 
      .flatMap(s -> services.verifyData(Integer.parseInt(s)) 
        .subscribeOn(Schedulers.io()), maxConcurrent) 
      //subscription 

因此,它從你的列表中創建的id流,並修改它,使您的API調用。

+0

但我需要minSdkVersion:24:/ https://code.google.com/p/android/issues/detail?id=207493 –

+1

使用retrolambda或匿名課程 –

+0

謝謝!使用retrolambda工作得很好:http://www.vogella.com/tutorials/Retrolambda/article.html –