我使用改造来从服务器获取和发布数据。但是,如果我的手机在应用程序中间失去了互联网连接,那么我会看到如下错误:
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)
我想优雅地处理这个错误。我想抓住异常并显示像#34;没有互联网连接的祝酒消息"。
我尝试使用这样的代码,但收到的错误是: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();
}
答案 0 :(得分:5)
我认为你需要在catch中有一个改进的例外。
catch (RetrofitError error) {
methodToDeterminErrorType(error);
}
RetroFitError
是一个通用的运行时异常。一旦它碰到了catch块,你就可以实际验证改造后实际抛出了什么样的错误。 Retrofit有一个方法isNetworkError()
,这是你可能正在寻找的。
所以你基本上可以这样做:
methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
// show a toast
}
}
希望这有帮助。