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

Ant*_*ony 8 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)
Run Code Online (Sandbox Code Playgroud)

我想优雅地处理这个错误.我想抓住异常并显示像"没有互联网连接"这样的祝酒消息.

我正在尝试这样的代码,但我得到一个错误: 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();
  }
Run Code Online (Sandbox Code Playgroud)

use*_*882 5

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

catch (RetrofitError error) {
    methodToDeterminErrorType(error);
}
Run Code Online (Sandbox Code Playgroud)

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

methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
    // show a toast
   }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.