Android 如何在使用改型时处理java.net.UnknownHostException
我使用改型从服务器获取和发布数据。但是,如果我的手机在应用程序中间失去了互联网连接,我会看到如下错误:Android 如何在使用改型时处理java.net.UnknownHostException,android,android-internet,Android,Android Internet,我使用改型从服务器获取和发布数据。但是,如果我的手机在应用程序中间失去了互联网连接,我会看到如下错误: 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.lookupHos
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)
methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
// show a toast
}
}
我想优雅地处理这个错误。我想抓住这个例外,并展示一个祝酒词,比如“没有互联网连接”
我正在尝试这样的代码,但我得到一个错误:java.net.UnknownHostException从未在try块中抛出
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();
}
我认为您需要在catch中有一个改装例外
catch (RetrofitError error) {
methodToDeterminErrorType(error);
}
错误
是一般运行时异常。一旦它碰到了catch块,您就可以实际验证改型实际上抛出了什么样的错误。改装有一个方法isNetworkError()
,您可能正在寻找它。
所以你基本上可以这样做:
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)
methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
// show a toast
}
}
希望这有帮助。现在,error.isNetworkType()已被弃用。只需使用error.getKind()==Kind.NETWORK即可