volley example android asynchronous request timeout android-volley

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