Lorsque la connexion Internet est fournie, mon application peut se connecter à un serveur via une socket Web à l'aide de OkHttp (v 3.9.0). Je veux gérer une tentative ratée de se connecter à une socket Web avec élégance (c'est-à-dire lorsqu'aucune connexion Internet n'est disponible).Comment faire pour attraper UnknownHostException lors de la connexion à websocket via OkHttp sur Android?
Je construis une connexion à mon serveur en utilisant le code présenté ci-dessous:
Request request = new Request.Builder()
.url(BuildConfig.WS_URL)
.build();
client.newWebSocket(request, webSocketListener);
Mon auditeur poignées UnknownHostException de défaillance et les journaux.
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
if(t instanceof UnknownHostException) {
Log.v("LISTENER", "UNKNOWN HOST EXCEPTION");
}
}
Le résultat est
09-11 15:16:32.773 18384-18473/com.example.app V/LISTENER: UNKNOWN HOST EXCEPTION
09-11 15:16:32.775 18384-18473/com.example.app E/AndroidRuntime: FATAL EXCEPTION: OkHttp https://my.server.url/...
Process: com.example.app, PID: 18384
Et les application se bloque.
J'ai essayé d'entourer le premier bloc de code avec try-catch, en attrapant toutes les exceptions levées, mais plus tard, j'ai compris que UnknownHostException doit avoir déjà été géré en interne par OkHttpClient. OkHttpClient a ensuite appelé la méthode onFailure de mon écouteur. Cependant, UnknownHostException reste toujours non capturé. Y a-t-il un moyen d'attraper cette exception? Je ne veux pas utiliser Thread.setDefaultUncaughtExceptionHandler()
. Y a-t-il un autre moyen de gérer cette situation?
Pourquoi vous essayez de ne pas utiliser Retrofit2 au lieu de OkHttp? Habituellement, Retrofit fonctionne pour Android et OkHttp est utilisé pour "Java Standard". –
UnknownHostException n'est jamais lancé à l'intérieur de la méthode onFailure(). – canihazurcode