2017-06-16 116 views
1

下面這段代碼是一個for循環上的Web服務如何要等到布爾每次循環等待獲得布爾值爲true

檢查代碼

for (i=0;i<contactsString.length-1;i++){ 
     Phone phone=new Phone(); 
     phone.phone=contactsString[i]; 
     check=false; 
     WebService.getInstance().getApi().checkNumber(phone).enqueue(new Callback<MainResponse>() { 

      @Override 
      public void onResponse(Call<MainResponse> call, Response<MainResponse> response) { 

       availableUsers++; 
       check=true; 
      } 

      @Override 
      public void onFailure(Call<MainResponse> call, Throwable t) { 

      } 
     }); 
     //--- here how to wait untill check is true then continue the loop 

    } 
+0

您在哪裏指定代碼中的check = true。 –

+0

內onResponse – RealDEV

+2

在地方循環使用遞歸函數的.....這將很好地工作在這種情況下 – santoXme

回答

3

的評論怎麼之前是真實的等待,直到檢查真,則繼續循環

使用遞歸函數

將字段初始化爲availableUsers=0。要啓動循環,請致電checkNumber()

private int availableUsers=0; 

    public void checkNumber() { 
     this.checkNumber(0); 
    } 
    private void checkNumber(final int i){ 
     if(contactsString==null || i>=contactsString.length){ 
      return; 
     } 
     Phone phone=new Phone(); 
     phone.phone=contactsString[i]; 
     WebService.getInstance().getApi().checkNumber(phone).enqueue(new Callback<MainResponse>() { 

      @Override 
      public void onResponse(Call<MainResponse> call, Response<MainResponse> response) { 


       availableUsers++;      
       checkNumber(i+1); 

      } 

      @Override 
      public void onFailure(Call<MainResponse> call, Throwable t) { 
       checkNumber(i+1); 

      } 
     }); 
} 
+0

數組我得到數組越界,當我將它設置爲contactsString.length – RealDEV

+0

需要多一點幫助傢伙:d 我可以發送和接收一個字符串值與改造如何發送一個ARR AY和接收另一個數組,什麼是它的JSON形成的發送和接收的形式,一個簡單的例子會幫助我理解,如果可能的 – RealDEV

+0

@Darish如果你設置的方法私有的,你需要創建一個公衆一個像'公共無效checkNumber(){ this.checkNumber(0);'隱藏遞歸解決方案。這樣可以防止某人調用checkNumber(100);但是,這是正確的。你明白爲什麼了嗎?最重要的 – AxelH