2017-09-13 8 views
0

私はこのようなボレーリクエストをしています。私は、arraylistのサイズに応じて、ポストコマンドを1回か2回以上やりたいと思っています。しかし、このコードを実行すると、volleyコマンドが1回だけ実行されます。アンドロイドで一度だけ実行するバレーリクエストJava

これは私が試みたものです。

for(int i = 0; i<listofobjects.size(); i++){ 
    makeRequest(listobjects.get(i)); 
} 


public void makeRequest(Customobject obj){ 

RequestQueue requestQueue = Volley.newRequestQueue(this); 
    String modifiedUrl = MainActivity.URL + "XXXXX"; 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, modifiedUrl, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.v("Response", response); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.v("Error", error.toString()); 
     } 
})}; 

requestQueue.add(stringRequest); 

} 

このコードでは、一度だけボレーリクエストを実行します。どのように私はlistofオブジェクトにある項目の数に応じて実行させることができます。

+0

おそらく、あなたのVolley Singletonは、以前に作成された同じURLへのリクエストをキャンセルします。応答がシリアル化されるように変更する必要があります。 –

答えて

1
// Gloabal variable 
int i = 0; 

この関数を呼び出し

makeRequest(listobjects.get(i)); 

makeRequestメソッドは、私はこの方法で問題が解決すると思います

public void makeRequest(Customobject obj){ 

RequestQueue requestQueue = Volley.newRequestQueue(this); 
    String modifiedUrl = MainActivity.URL + "XXXXX"; 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, modifiedUrl, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.v("Response", response); 
      i++; 
      if(i < listobjects.size()){ 
       // make a recursive function 
       makeRequest(listobjects.get(i)); 
      } else { 
       // Completed 
      } 



     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.v("Error", error.toString()); 
     } 
})}; 

requestQueue.add(stringRequest); 

} 
+0

i ++が見つかりません... –

1

これを試してみてください:

public void makeRequest(Customobject obj){ 
    boolean status = true; 
    int i=0; 
    do 
    { 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
     String modifiedUrl = MainActivity.URL + "XXXXX"; 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, modifiedUrl, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       status = true; 
       Log.v("Response", response); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       status = true; 
       Log.v("Error", error.toString()); 
      } 
    })}; 
    if(status) 
{ 
    requestQueue.add(stringRequest); 
    i++; 
     status =false;   

} 
    }while(i<listofobjects.size()); 

    } 
+0

あなたは無限ループで動作することになります。ボレーは非同期であり、whileループは反復の応答を待機しないことに注意してください。 –

+0

あなたの新しいコード変更は、質問で求められるものと同じです。あなたはwhileループのためにリファクタリングしました。 –

+0

はいdo whileのwhileループでいくつかの拡張を行っています –

1

再帰的に呼び出されます。

int i = 0; 
makeRequest(listObjects.get(i)); 
public void makeRequest(Customobject obj){ 
RequestQueue requestQueue = Volley.newRequestQueue(this); 
    String modifiedUrl = MainActivity.URL + "XXXXX"; 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, modifiedUrl, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.v("Response", response); 
       if(reposnse==success && i<listobjects.size){ 
        i++; 
        makeRequest(listObjects.get(i)); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.v("Error", error.toString()); 
     } 
})}; 

requestQueue.add(stringRequest); 

} 
関連する問題