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));