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?

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í .

  • OkHttp PublicKey pinning en Android
  • Consiguió este error con retrofit2 y OkHttp3. No se puede resolver el host "<host-name>": ninguna dirección asociada con el nombre de host
  • OKHTTP 3 Seguimiento del progreso de subida de varias partes
  • Android Retrofi 2, las diferencias entre addInterceptor y addNetworkInterceptor para editar las respuestas
  • ¿Cómo obtener la URL redireccionada de OkHttp3?
  • Okhttp siempre reintento conexión fallida
  • Añadir cookie a la solicitud del cliente OkHttp
  • ¿Por qué los métodos asíncronos llaman antes en Retrofit 2?
  • "Return response.body (). String ()" está vacío con okhttp3
  • MultipartBuilder no se puede resolver en okhttp: 3.0.0-RC1
  • Crear una dependencia gradle - eliminar el acceso a sus propias dependencias
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.