android - example - volley request post
Android Volley realiza 2 solicitudes al servidor cuando la polĂtica de reintentos se establece en 0 (3)
La clase hasAttemptRemaining () de DefaultRetryPolicy.class se ve así:
protected boolean hasAttemptRemaining() {
return this.mCurrentRetryCount <= this.mMaxNumRetries;
}
Por lo que puedo ver, establecer maxNumRetries en 0 todavía hará que el retorno sea verdadero si aún no se ha vuelto a intentar.
Lo arreglé con un
request.setRetryPolicy(new DefaultRetryPolicy(0, -1, 0);
Estoy trabajando en un proyecto de Android que utiliza Volley para solicitudes asíncronas e imágenes. De alguna manera, una solicitud está llegando al servidor dos veces, incluso cuando tengo la política de reintentos establecida en 0. Intenté reemplazar los valores del objeto DefaultRetryPolicy sin éxito. Aquí hay un código de ejemplo:
La solicitud:
@Override
public void gravarVendaMobile(final Usuario usuarioAutenticado, final AsyncCallback<String> callback) {
obterParametrosDeInicializacao().done(new DoneCallback<ParametrosDeInicializacao>() {
@Override
public void onDone(final ParametrosDeInicializacao param) {
requestQueue.add(setDefaultRetryPolicy(new StringRequest(
Method.POST,
urlPara(GRAVAR_VENDA_MOBILE, usuarioAutenticado.getFilial(), usuarioAutenticado.getCodigo()),
listener(callback),
//errorListener(R.string.could_not_load_produtos, callback)
new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.onError(new MessageCodeException(error.networkResponse.statusCode, error));
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Encoding", "UTF-8");
headers.put("Accept", "application/json");
headers.put("Content-type", "application/json; charset=UTF-8");
return headers;
}
}));
}
});
}
Política de reintento:
private Request<?> setDefaultRetryPolicy(Request<?> request) {
request.setRetryPolicy(new DefaultRetryPolicy(30000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
return request;
}
Básicamente, quiero establecer el tiempo de espera en 30 segundos con 0 reintentos.
Si incremento el número de reintentos, funciona como se esperaba, pero si lo configuro a 0, realiza 2 solicitudes.
Necesito ayuda aqui
Editar
Logré resolver mi problema configurando la propiedad keep-alive en false dentro de Android. p.ej:
System.setProperty("http.keepAlive", "false");
Agregué esta línea de código dentro de la clase donde importo la cola de solicitud y hago las solicitudes.
Además, verifique si su servidor tiene el encabezado de mantenimiento.
Este post ayudó a llegar a la solución.
Solo establezca el tiempo de espera en 20 segundos o más como desee y vuelva a intentarlo en 0
req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Uso esto para establecer la política de no repetición:
myRequest.setRetryPolicy(new DefaultRetryPolicy(0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));