OkHttpClient tiene un recuento máximo de reintentos
Estoy fijando la opción del reintento en la falta de la conexión para OkHttpClient.
client = new OkHttpClient(); client.setRetryOnConnectionFailure(true);
Me gustaría saber cuántas veces seguirá intentando. Mirando el código fuente no vi ningún límite máximo. ¿Cómo configuro el cliente para que deje de intentar después de algunos intentos?
- MissingResourceException: No se puede encontrar el paquete para el nombre base sun.util.logging.resources.logging, locale en_US
- Android con Retrofit2 OkHttp3 - Error POST de varias partes
- OKhttp: SSLProtocolException: Protocolo de enlace SSL finalizado
- ¿Cuál es la diferencia entre .string () y .toString () para OkHttp?
- Retrofit v2 ¿Call.cancel () elimina la devolución de llamada?
- Cómo soportar múltiples puntos finales con Dagger 2.0 mientras usa MockWebServer
- ¿Cómo enviar post parámetros dinámicamente (o en bucle) en OKHTTP 3.x en android?
- OkHttp 3 y HttpURLConnection
- ¿Cómo publico datos usando la biblioteca okhttp con el tipo de contenido x-www-form-urlencoded?
- Recvfrom falló: ECONNRESET (Conexión restablecida por pares)
- Caché de datos de respuesta con retrofit2 + okhttp3
- Error al invocar public okhttp3.RequestBody () sin args
- NoClassDefFoundError: Resolución fallida de: Lokhttp3 / internal / Platform
Hay más documentos aquí https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.Builder.html#retryOnConnectionFailure-boolean-
Configure este cliente para reintentar o no cuando se encuentra un problema de conectividad. De forma predeterminada, este cliente se recupera silenciosamente de los siguientes problemas:
- Direcciones IP inalcanzables. Si el host de la URL tiene varias direcciones IP, el error de no alcanzar ninguna dirección IP individual no fallará en la solicitud general. Esto puede aumentar la disponibilidad de servicios multi-homed.
Conexiones agrupadas estancadas. ConnectionPool reutiliza los sockets para disminuir la latencia de la solicitud, pero estas conexiones ocasionalmente se agotan.
Servidores proxy inalcanzables. Un ProxySelector puede utilizarse para intentar múltiples servidores proxy en secuencia, eventualmente volver a una conexión directa.
Defina esto como false para evitar repetir peticiones al hacerlo es destructivo. En este caso, la aplicación que llama debe hacer su propia recuperación de fallos de conectividad.
Pero, en general, creo que se intenta volver a intentar cuando hay una conexión obsoleta existente, o caminos alternativos que se pueden volver a intentar. No repetir exactamente lo mismo indefinidamente.
Véase también ConnectionSpecSelector.connectionFailed
Hice una solución alternativa a continuación:
@Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); // try the request Response response = doRequest(chain,request); int tryCount = 0; while (response == null && tryCount <= RetryCount) { String url = request.url().toString(); url = switchServer(url); Request newRequest = request.newBuilder().url(url).build(); tryCount++; // retry the request response = doRequest(chain,newRequest); } if(response == null){//important ,should throw an exception here throw new IOException(); } return response; } private Response doRequest(Chain chain,Request request){ Response response = null; try{ response = chain.proceed(request); }catch (Exception e){ } return response; }
No hay ningún método incorporado para establecer el límite máximo, pero puede agregar un interceptor como a continuación.
client.interceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); // try the request Response response = chain.proceed(request); int tryCount = 0; int maxLimit = 3; //Set your max limit here while (!response.isSuccessful() && tryCount < maxLimit) { Log.d("intercept", "Request failed - " + tryCount); tryCount++; // retry the request response = chain.proceed(request); } // otherwise just pass the original response on return response; } });
Más detalles sobre interceptos se pueden encontrar aquí .