Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Volley double post when have slow request

I have a problem with Volley POST request on slow network. Everytime I see BasicNetwork.logSlowRequests in my LogCat, my POST request is executed twice or more resulting multiple (2 or more) postings for 1 request. I already set the retry policy to 0, but It doesn't help.

This is my LogCat

03-16 01:31:35.674: D/Volley(5984): [19807] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://[myserver]/api/places 0xfa7d0c33 NORMAL 1> [lifetime=3824], [size=313], [rc=200], [retryCount=0] 03-16 01:31:35.704: D/Volley(5984): [1] Request.finish: 3853 ms: [ ] http://[myserver]/api/places 0xfa7d0c33 NORMAL 1

This is my code

JSONObject body = new JSONObject(); try {     body.put(PROTO_BODY_AUTHORIZATION, Sessions.getActiveSession().getToken()); } catch (JSONException e) {     e.printStackTrace(); }  JsonObjectRequest request = new JsonObjectRequest(         Request.Method.POST,         context.getResources().getString(R.string.server_address) + "/places",         body,         callback,         new Response.ErrorListener() {             @Override             public void onErrorResponse(VolleyError error) {                 Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show();             }         } );  request.setRetryPolicy(         new DefaultRetryPolicy(                 DefaultRetryPolicy.DEFAULT_TIMEOUT_MS,                 0,                 DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));     getRequestQueue().add(request); 

Please help, I desperately finding solution for this problem.

like image 409
aristo_sh Avatar asked Mar 15 '14 19:03

aristo_sh


Video Answer


1 Answers

Add the following values to your Request object:

request.setRetryPolicy(new DefaultRetryPolicy(     DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2,     DefaultRetryPolicy.DEFAULT_MAX_RETRIES,     DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

Here: request is your object of JsonObjectRequest. Change the value of multiplicator according to the DEFAULT TIMEOUT VALUE in DefaultRetryPolicy class in Volley.

You can also set the first argument to 0, like below:

request.setRetryPolicy(new DefaultRetryPolicy(     0,     DefaultRetryPolicy.DEFAULT_MAX_RETRIES,     DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
like image 146
Droid_Mechanic Avatar answered Oct 16 '22 08:10

Droid_Mechanic