當提供互聯網連接時,我的應用程序可以使用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