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即可