2016-05-15 4 views
0

Я использую volley singleton и добавляю к нему весь запрос на волейбол.подождите несколько ответов волейбола в цикле for

пример кода добавления запроса в очередь залпового

MyApplication.getInstance().addToReqQueue(jsObjRequest, "jreq1"); 

У меня есть функция OnClick.

buttonId.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        for(int i=0;i<4;i++){ 
        //....... here i call for asycn volley requests which get added to the queue of volleysingleton 

        } 

        // ******how to ensure all my volley requests are completed before i move to next step here.***** 


        //calling for new intent 
        Intent m = new Intent(PlaceActivity.this, Myplanshow.class); 
         m.putExtra("table_name", myplansLists.get(myplansLists.size() - 1).table_name); 
         m.putExtra("table_name_without_plan_number", myplansLists.get(myplansLists.size() - 1).place_url_name); 
         m.putExtra("changed", "no"); 
         m.putExtra("plannumber", myplansLists.size()); 

        //moving to new intent; 
         v.getContext().startActivity(m); 

} 
      }); 

Внутри onclick у меня есть цикл for, который будет выполнять несколько запросов волейбола.

После цикла for он начнет новую деятельность посредством намерения.

Но для моего нового действия, которое нужно показать, мне нужны данные всех запросов волейбола в цикле for, которые должны быть выполнены до этого, он покидает это действие и переходит к новому действию.

ответ

0

Мой подход в основном состоит в том, чтобы установить 2 переменные int: successCount и errorCount, которые я использую для контроля запросов волейбола. В onResponse каждого запроса я увеличиваю переменную successCount, а затем в onErrorResponse я увеличиваю errorCount. В конце я проверяю, равна ли сумма обеих переменных числу выполненных запросов, если это не так, поток ожидает в цикле. проверить это:

buttonId.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 


     new Runnable(){ 
      @Override 
      public void run() { 
       int successCount=0; 
       int errorCount=0; 
       for(int i=0;i<4;i++){ 
        //....... here i call for asycn volley requests which get added to the queue of volleysingleton 
        //in the onResponse of each of the volley requests, increment successCount by 1; 
        // i.e successCount++; 
        //also in onErrorResponse of each of the volley requests, increment 
        // errorCount by 1 

       } 

       // ******how to ensure all my volley requests are completed before i move to next step here.***** 

       // wait here till all requests are finished 
       while (successCount+errorCount<4) 
       { 
        Log.d("Volley"," waiting"); 

       } 

       //calling for new intent 
       Intent m = new Intent(PlaceActivity.this, Myplanshow.class); 
       m.putExtra("table_name", myplansLists.get(myplansLists.size() - 1).table_name); 
       m.putExtra("table_name_without_plan_number", myplansLists.get(myplansLists.size() - 1).place_url_name); 
       m.putExtra("changed", "no"); 
       m.putExtra("plannumber", myplansLists.size()); 

       //moving to new intent; 
       v.getContext().startActivity(m); 
      } 
     }.run(); 




    } 
}); 
+0

Я попробую, выглядит должно работать. –

Смежные вопросы