インターネット接続が提供されると、私のアプリは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は「Standard Java」で使用されます。 –
UnknownHostExceptionがonFailure()メソッドの内部でスローされることはありません。 – canihazurcode