Uso el nuevo marco Volley para Android para hacer una solicitud a mi servidor. Pero se agota el tiempo de espera antes de obtener la respuesta, aunque sí responde.
Intenté agregar este código:
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);
en HttpClientStack
el marco de Volley a un número entero diferente (50000), pero aún así agota el tiempo de espera antes de 50 segundos.
¿Hay alguna manera de cambiar el tiempo de espera a un valor largo?
android
timeout
android-volley
Cissmayazz
fuente
fuente
HttpClient
clase.Respuestas:
Ver
Request.setRetryPolicy()
y el constructor deDefaultRetryPolicy
, por ejemplofuente
Para manejar Android Volley Timeout necesita usar
RetryPolicy
RetryPolicy
RetryPolicy
es una interfaz en la que necesita implementar su lógica de cómo desea volver a intentar una solicitud en particular cuando ocurre un tiempo de espera.Se ocupa de estos tres parámetros.
Por ej. Si RetryPolicy se crea con estos valores
Intento de reintento 1:
Intento de reintento 2:
Por lo tanto, al final del Reintento Intento 2 si todavía se agota el tiempo de espera de Socket, Volley arrojaría un
TimeoutError
controlador de respuesta de error de UI.fuente
RetryPolicy
realmente hace la implementación.new DefaultRetryPolicy(
y asegúrese de nunca reutilizar unRetryPolicy
objeto, ya que se hace referencia al objeto a través de todo el proceso de solicitud, y se agregan incrementos de reintento sobre el mismo valor de tiempo de espera del objeto, lo que hace que sus futuros tiempos de espera de solicitud crezcan infinitamenteSolo para contribuir con mi enfoque. Como ya respondí,
RetryPolicy
es el camino a seguir. Pero si necesita una política diferente a la predeterminada para todas sus solicitudes, puede establecerla en una clase de Solicitud base, por lo que no necesita establecer la política para todas las instancias de sus solicitudes.Algo como esto:
En mi caso, tengo una GsonRequest que se extiende desde esta BaseRequest, por lo que no corro el riesgo de olvidar establecer la política para una solicitud específica y aún puede anularla si alguna solicitud específica lo requiere.
fuente
fuente
Puede establecer
MY_SOCKET_TIMEOUT_MS
como 100. Lo que quiera establecer es en milisegundos.DEFAULT_MAX_RETRIES
puede ser 0 por defecto es 1.fuente
fuente
Otra forma de hacerlo es en JsonObjectRequest personalizado por:
Fuente: Ejemplo de Android Volley
fuente
Solución alternativa si todas las soluciones anteriores no funcionan para usted
Por defecto, Volley establece un tiempo de espera igual para ambos
setConnectionTimeout()
ysetReadTimeout()
con el valor deRetryPolicy
. En mi caso,Volley
lanza una excepción de tiempo de espera para un gran fragmento de datos, consulte:Mi solución es crear una clase que se extienda
HttpStack
con mi propiasetReadTimeout()
política. Luego úselo cuando cree de laRequestQueue
siguiente manera:fuente
Terminé agregando un método
setCurrentTimeout(int timeout)
alRetryPolicy
y su implementación enDefaultRetryPolicy
.Luego agregué un
setCurrentTimeout(int timeout)
en la clase Solicitud y lo llamé.Esto parece hacer el trabajo.
Perdón por mi pereza por cierto y hurra por el código abierto.
fuente