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 HttpClientStackel 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

HttpClientclase.Respuestas:
Ver
Request.setRetryPolicy()y el constructor deDefaultRetryPolicy, por ejemplofuente
Para manejar Android Volley Timeout necesita usar
RetryPolicyRetryPolicy
RetryPolicyes 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
TimeoutErrorcontrolador de respuesta de error de UI.fuente
RetryPolicyrealmente hace la implementación.new DefaultRetryPolicy(y asegúrese de nunca reutilizar unRetryPolicyobjeto, 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í,
RetryPolicyes 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_MScomo 100. Lo que quiera establecer es en milisegundos.DEFAULT_MAX_RETRIESpuede 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,Volleylanza una excepción de tiempo de espera para un gran fragmento de datos, consulte:Mi solución es crear una clase que se extienda
HttpStackcon mi propiasetReadTimeout()política. Luego úselo cuando cree de laRequestQueuesiguiente manera:fuente
Terminé agregando un método
setCurrentTimeout(int timeout)alRetryPolicyy 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