2017-06-16 75 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