Cambiar la duración del tiempo de espera de la volea

Resuelto Cissmayazz asked hace 54 años • 9 respuestas

Utilizo el nuevo marco Volley para Android para realizar una solicitud a mi servidor. Pero se agota el tiempo de espera antes de recibir la respuesta, aunque responde.

Intenté agregar este código:

HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);

del HttpClientStackmarco Volley a un número entero diferente (50000), pero aún así se agota antes de los 50 segundos.

¿Hay alguna manera de cambiar el tiempo de espera a un valor largo?

Cissmayazz avatar Jan 01 '70 08:01 Cissmayazz
Aceptado

Ver Request.setRetryPolicy()y el constructor para DefaultRetryPolicy, por ejemplo

JsonObjectRequest myRequest = new JsonObjectRequest(Method.GET,
        url, null,
        new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error: " + error.getMessage());
            }
});

myRequest.setRetryPolicy(new DefaultRetryPolicy(
        MY_SOCKET_TIMEOUT_MS, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
larham1 avatar Jun 18 '2013 21:06 larham1

Para manejar Android Volley Timeout necesitas usarRetryPolicy

Política de reintento

  • Volley proporciona una manera fácil de implementar su RetryPolicy para sus solicitudes.
  • Volley establece el Socket & ConnectionTImeout predeterminado en 5 segundos para todas las solicitudes.

RetryPolicyes una interfaz en la que necesita implementar su lógica de cómo desea volver a intentar una solicitud en particular cuando se agota el tiempo de espera.

Se trata de estos tres parámetros.

  • Tiempo de espera: especifica el tiempo de espera del socket en milisegundos por cada reintento.
  • Número de reintentos: número de veces que se intenta reintentar.
  • Multiplicador de retroceso: un multiplicador que se utiliza para determinar el tiempo exponencial establecido en el socket para cada intento de reintento.

Por ej. Si RetryPolicy se crea con estos valores

Tiempo de espera: 3000 ms, número de intentos de reintento: 2, multiplicador de retroceso: 2,0

Reintentar el intento 1:

  • tiempo = tiempo + (tiempo * Multiplicador de retroceso);
  • tiempo = 3000 + 6000 = 9000ms
  • Tiempo de espera del socket = tiempo;
  • Solicitud enviada con tiempo de espera de socket de 9 segundos

Reintentar intento 2:

  • tiempo = tiempo + (tiempo * Multiplicador de retroceso);
  • tiempo = 9000 + 18000 = 27000ms
  • Tiempo de espera del socket = tiempo;
  • Solicitud enviada con un tiempo de espera de socket de 27 segundos

Entonces, al final del reintento 2 , si aún ocurre el tiempo de espera del socket, Volley arrojaría un TimeoutErrorcontrolador de respuesta de error en la interfaz de usuario.

//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions. 
//Volley does retry for you if you have specified the policy.
jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000, 
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Yakiv Mospan avatar Mar 04 '2014 10:03 Yakiv Mospan