Investigamos por diferentes foros para así darte la respuesta a tu duda, en caso de dudas déjanos tu comentario y contestamos con gusto.
Solución:
He buscado en toda la web y después de leer muchos documentos sobre la excepción de tiempo de espera de conexión, lo que entendí es que, evitando SocketTimeoutException
está más allá de nuestro límite. Una forma de manejarlo de manera efectiva es definir un tiempo de espera de conexión y luego manejarlo usando un try-catch
cuadra. Espero que esto ayude a cualquier persona en el futuro que esté enfrentando el mismo problema.
HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
//set the timeout in milliseconds
conn.setConnectTimeout(7000);
Soy consciente de que esta pregunta es un poco antigua. Pero como me topé con esto mientras investigaba, pensé que una pequeña adición podría ser útil.
Como se indicó, el cliente no puede resolver el error, ya que es un problema relacionado con la red. Sin embargo, lo que puede hacer es volver a intentar conectarse varias veces. Esto puede funcionar como una solución alternativa hasta que se solucione el problema real.
for (int retries = 0; retries < 3; retries++)
try
final HttpClient client = createHttpClientWithDefaultSocketFactory(null, null);
final HttpResponse response = client.execute(get);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200)
throw new IllegalStateException("GET Request on '" + get.getURI().toString() + "' resulted in " + statusCode);
else
return response.getEntity();
catch (final java.net.SocketTimeoutException e)
// connection timed out...let's try again
Tal vez esto ayude a alguien.
Si estás usando Kotlin + Retrofit + Corrutinas entonces solo usa try
y catch
para operaciones de red como,
viewModelScope.launch(Dispatchers.IO)
try
val userListResponseModel = apiEndPointsInterface.usersList()
returnusersList(userListResponseModel)
catch (e: Exception)
e.printStackTrace()
Donde, Excepción es tipo de kotlin
y no de java.lang
Esto manejará cada excepción como,
- HttpException
- Excepción de tiempo de espera de socket
- EXCEPCIÓN FATAL: DefaultDispatcher, etc.
Aquí está mi usersList()
función
@GET(AppConstants.APIEndPoints.HOME_CONTENT)
suspend fun usersList(): UserListResponseModel
Nota:
Sus Clases RetrofitClient deben tener esto como client
OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
Sección de Reseñas y Valoraciones
Te invitamos a añadir valor a nuestra información participando con tu experiencia en las explicaciones.