Me gustaría manejar situaciones en las que no hay conexión a Internet. Normalmente corro:
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
(desde aquí ) antes de enviar las solicitudes a la red y notificar al usuario si no hubo conexión a Internet.
Por lo que vi, Retrofit no maneja esta situación específicamente. Si no hay conexión a Internet, simplemente obtendré el RetrofitErrortiempo de espera como motivo.
Si quisiera incorporar este tipo de verificación en cada solicitud HTTP con Retrofit, ¿cómo debo hacerlo? O debería hacerlo en absoluto.
Gracias
Alex

Respuestas:
Lo que terminé haciendo es crear un cliente Retrofit personalizado que verifica la conectividad antes de ejecutar una solicitud y lanza una excepción.
y luego utilícelo al configurar
RestAdapterfuente
NoConnectivityException, puede extenderloIOExceptiono extenderloRuntimeExceptionDesde la actualización,
1.8.0esto ha quedado obsoletotienes que usar
hay varios tipos de errores que puede manejar:
NETWORKSe produjo una IOException durante la comunicación con el servidor, por ejemplo, tiempo de espera, sin conexión, etc.CONVERSIONSe lanzó una excepción al (des) serializar un cuerpo.HTTPSe recibió un código de estado HTTP distinto de 200 del servidor, por ejemplo, 502, 503, etc.UNEXPECTEDSe produjo un error interno al intentar ejecutar una solicitud. Es una buena práctica volver a lanzar esta excepción para que su aplicación se bloquee.fuente
equalssobre variables, use siempre en suCONSTANT.equals(variable)lugar para evitar posibles NullPointerException. O incluso mejor en este caso, las enumeraciones aceptan == comparación, por lo queerror.getKind() == RetrofitError.Kind.NETWORKpodría ser un mejor enfoqueCon Retrofit 2, usamos una implementación de OkHttp Interceptor para verificar la conectividad de la red antes de enviar la solicitud. Si no hay red, lance una excepción según corresponda.
Esto le permite a uno manejar específicamente los problemas de conectividad de la red antes de optar por Retrofit.
fuente
OkHttpClient.Builder.addInterceptor(new ConnectivityInterceptor(HERE))¿Qué debería estar AQUÍ?@AlexV, ¿está seguro de que RetrofitError contiene un tiempo de espera como motivo (SocketTimeOutException cuando se llama a getCause ()) cuando no hay conexión a Internet?
Hasta donde yo sé, cuando no hay conexión a Internet, el RetrofitError contiene una ConnectionException como causa.
Si implementa un ErrorHandler , puede hacer algo como esto:
fuente
isNetworkErrordeshacerse de no puede resolver el error del host?error.getKind() == RetrofitError.Kind.NETWORKPara reequipamiento 1
Cuando recibe un
Throwableerror de su solicitud http, puede detectar si se trata de un error de red con un método como este:fuente
solo haga esto, se le notificará incluso para problemas como
,
y otros.
fuente
puedes usar este código
Response.java
NetworkError.java
Implementación en tus métodos
fuente