首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用retrofit时处理java.net.UnknownHostException

如何在使用retrofit时处理java.net.UnknownHostException
EN

Stack Overflow用户
提问于 2014-05-10 20:39:42
回答 1查看 6.1K关注 0票数 8

我正在使用retrofit从服务器获取和发布数据。然而,如果我的手机在应用程序中途失去了互联网连接,那么我会看到这样的错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
  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();
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-10 21:45:51

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

代码语言:javascript
复制
catch (RetrofitError error) {
    methodToDeterminErrorType(error);
}

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

代码语言:javascript
复制
methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
    // show a toast
   }
}

希望这能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23581167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档