2016-05-17 60 views
2

我在我的一個應用程序中使用了翻新API。 下面是代碼: -如何應用同步任務進行改造android

for(int i=0; i< mFileArrayList.size();i++){ 


    WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done", new Callback<NotesResponse>() { 

      @Override 
      public void success(NotesResponse response, retrofit.client.Response response2) { 
       System.out.println(response); 
       Toast.makeText(AllKPIActivity.this, "Success", Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       System.out.println(error); 
       Toast.makeText(AllKPIActivity.this, "Fail", Toast.LENGTH_SHORT).show(); 
      } 
     }); 


    } 

正在發生的事情是成功的某個時候到來之前,循環繼續運行並失敗來。 我想要的是當第一次成功時,只有循環前進。 請幫助,我該如何做到這一點?

回答

4

如果我是你,我會重新組織代碼手動做循環。這樣

int i = 0; 

private void fowardLoop(){ 
    if(i => mFileArrayList.size()){ 
     return; //loop is finished; 
    } 

    i++; 
    WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done", new Callback<NotesResponse>() { 

     @Override 
     public void success(NotesResponse response, retrofit.client.Response response2) { 
      System.out.println(response); 
      Toast.makeText(AllKPIActivity.this, "Success", Toast.LENGTH_SHORT).show(); 
      forwardLoop(); // loop continues only if you get the success callback from previous request. 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      System.out.println(error); 
      Toast.makeText(AllKPIActivity.this, "Fail", Toast.LENGTH_SHORT).show(); 
      // the loop breaks when there is failure callabck. 
     } 
    }); 
} 

的東西,你想

的改造仍然是異步的,但只要你想在應用程序的行爲只是使用forwardLoop()方法來啓動循環。 希望它會有幫助我沒有測試這個解決方案。

+0

感謝Karol ..它的作用是+1 –