我正在使用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();
}
发布于 2014-05-10 21:45:51
我认为你需要在catch中有一个改装的例外。
catch (RetrofitError error) {
methodToDeterminErrorType(error);
}
RetroFitError
是一个通用的运行时异常。一旦它命中catch块,您就可以实际验证改造实际上抛出了哪种类型的错误。Retrofit有一个方法isNetworkError()
,这就是你可能正在寻找的。所以你基本上可以这样做:
methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
// show a toast
}
}
希望这能有所帮助。
https://stackoverflow.com/questions/23581167
复制相似问题