Cambiar la duración del tiempo de espera de la volea
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 HttpClientStack
marco 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?
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));
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.
RetryPolicy
es 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 TimeoutError
controlador 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));