volley studio newrequestqueue example android android-volley

studio - Android volley enviando datos dos veces



volley android studio 2018 (5)

Estoy usando Volley Network Library en mi aplicación.

El problema es que está enviando datos más de una vez cuando la conexión de red es lenta.

Y después de buscar en Google este problema, todo lo que puedo encontrar sobre este problema está debajo del punto:

connection.setChunkedStreamingMode(0);

Pero no puedo editar mis clases de Hurlkstack de la biblioteca de voley.

Dice:

El frasco de este archivo de clase pertenece a las bibliotecas privadas de Android del contenedor que no permite la modificación de los archivos adjuntos de origen en sus entradas.

¿Qué debo hacer? ¿Puede alguien ayudarme?

Tengo el siguiente código donde debo modificar.

private void makeJsonObjectRequest() { JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, "http://example.com/***.php", obj, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { response.getString("success"); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); AppController.getInstance().addToRequestQueue(jsonObjReq); }


Esto funcionará

RetryPolicy mRetryPolicy = new DefaultRetryPolicy( 0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); request.setRetryPolicy(mRetryPolicy);


No es necesario usar connection.setChunkedStreamingMode(0); para evitar voleo enviando datos dos veces error. debe establecer una política de reintentos para la solicitud actual:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(...); jsonObjReq.setRetryPolicy(new DefaultRetryPolicy( 0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


Prueba esto definitivamente funcionará.

public <T> void addToRequestQueue(StringRequest req, String tag) { req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); getRequestQueue().add(req); }


Resuelvo este problema para usar este código. Establezca getCurrentRetryCount () para devolver 0 y use HurlStack para BaseHttpStack.

RequestQueue requestQueue = Volley.newRequestQueue(NavigationActivity.this, new HurlStack()); requestQueue.add(stringRequest).setRetryPolicy(new RetryPolicy() { @Override public int getCurrentTimeout() { return 5000; } @Override public int getCurrentRetryCount() { return 0; //retry turn off } @Override public void retry(VolleyError error) throws VolleyError { } });

Espero que esto resuelva el problema.


Use el siguiente código después de completar el nuevo método Response.ErrorListener () en su análisis de voley. Espero que sea útil para ti. Enfrenté el mismo problema y lo resolví con el mismo código.

Código:

jsObjRequest.setRetryPolicy(new DefaultRetryPolicy( 30000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));