Как обращаться с java.сеть.UnknownHostException при использовании дооснащения
Я использую retrofit для получения и публикации данных с сервера. Однако, если мой телефон теряет подключение к интернету в середине приложения, то я вижу ошибку, как это:
05-10 08:12:05.559 29369-29400/? D/Retrofit﹕ java.net.UnknownHostException: Unable to resolve host "my.server.com": No address associated with hostname
at java.net.InetAddress.lookupHostByName(InetAddress.java:394)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
at java.net.InetAddress.getAllByName(InetAddress.java:214)
Я хотел бы обработать эту ошибку изящно. Я хотел бы поймать исключение и показать сообщение тоста, как "нет подключения к интернету".
Я пытаюсь код, как это, но я получаю сообщение об ошибке:java.net.UnknownHostException is never thrown in the try block
try {
isTokenValid = MyManager.INSTANCE.getService().validate();
}
catch (RetrofitError cause) {
Response r = cause.getResponse();
if (r != null && r.getStatus() == 403) {
isTokenValid = false;
}
}
catch (UnknownHostException exception) {
Toast.makeText(getBaseContext(), "No internet connection", Toast.LENGTH_SHORT).show();
}
1 ответов
Я думаю, вам нужно иметь модифицированное исключение в улове.
catch (RetrofitError error) {
methodToDeterminErrorType(error);
}
на RetroFitError
является общим исключением времени выполнения. Как только он попадает в блок catch, вы можете проверить, какая ошибка была фактически вызвана retrofit. Retrofit имеет метод isNetworkError()
что вы, вероятно, ищет.
Так что вы можете в основном сделать что-то вроде этого:
methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
// show a toast
}
}
надеюсь, что это помогает.