如何在使用改造时处理java.net.UnknownHostException

时间:2014-05-10 12:39:42

标签: 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.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();
  }

1 个答案:

答案 0 :(得分:5)

我认为你需要在catch中有一个改进的例外。

catch (RetrofitError error) {
    methodToDeterminErrorType(error);
}

RetroFitError是一个通用的运行时异常。一旦它碰到了catch块,你就可以实际验证改造后实际抛出了什么样的错误。 Retrofit有一个方法isNetworkError(),这是你可能正在寻找的。 所以你基本上可以这样做:

methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
    // show a toast
   }
}

希望这有帮助。