当提供互联网连接时,我的应用程序可以使用OkHttp(v 3.9.0)通过websocket连接到服务器。我想要处理失败的尝试,以优雅地连接到websocket(即没有互联网连接可用时)。如何在Android上通过OkHttp连接到websocket时捕获UnknownHostException?
我建立使用下面给出的代码到我的服务器的连接:
Request request = new Request.Builder()
.url(BuildConfig.WS_URL)
.build();
client.newWebSocket(request, webSocketListener);
我的侦听器处理故障和日志的UnknownHostException。
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
if(t instanceof UnknownHostException) {
Log.v("LISTENER", "UNKNOWN HOST EXCEPTION");
}
}
结果是
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
和应用程序崩溃。
我试着用try-catch包围第一块代码,捕获抛出的任何异常,但后来我发现UnknownHostException必须已经由OkHttpClient内部处理过了。 OkHttpClient然后调用我的侦听器的onFailure方法。但是,UnknownHostException仍然未被捕获。有什么办法来捕捉这个异常?我不想用Thread.setDefaultUncaughtExceptionHandler()
。有没有其他办法来处理这种情况?
你为什么不尝试使用Retrofit2代替OkHttp?通常,Retrofit适用于Android,OkHttp适用于“标准Java”。 –
UnknownHostException永远不会抛出onFailure()方法。 – canihazurcode