【问题标题】:HttpURLConnection getResponseCode() deos not return if there is no Internet connection如果没有 Internet 连接,HttpURLConnection getResponseCode() deos 不会返回
【发布时间】:2014-11-03 06:43:54
【问题描述】:

我正在使用HttpURLConnection 使用以下代码检查服务器 URL 是否可用:

try {
    boolean connectionFailed = false;
    URL knownURL = new URL("http://www.google.com");
    httpConnection = (HttpURLConnection) knownURL.openConnection();
    httpConnection.setConnectTimeout(5000);
    responseCode = httpConnection.getResponseCode();
    if (responseCode != 200)  {
        status = ConnectionStatus.NOT_CONNECTED; 
    }
}
catch(Exception e) {
    connctionFailed = true;
}

此代码在正常情况下运行良好。但是在没有网络连接的情况下(要么是路由器断开,要么不是热点),httpConnection.getResponseCode() 不执行(函数不返回)。我该如何解决这个问题?

【问题讨论】:

  • 尝试将代码 sn-p 放入TRY CATCH Block。我怀疑(HttpURLConnection) knownURL.openConnection(); 在没有互联网时会抛出一个套接字异常,所以你没有到达`httpConnection.getResponseCode();`
  • knownURL.openConnection() 正在执行,它不会捕获块。调用 getResponseCode() 时停止
  • 尝试调试它。是的,你得到了一个例外。这就是为什么。检查您的 logcat 并在此处发布。
  • HttpUrlConnection 可以在没有互联网的情况下工作吗?

标签: android web-services httpurlconnection android-webservice ws-client


【解决方案1】:

httpConnection.setConnectTimeout(5000) 是连接超时。

这不是httpConnection.getResponseCode() 的超时。

如果添加httpConnection.setReadTimeout(2000)httpConnection.getResponseCode()应该在没有可用连接时抛出异常。

【讨论】:

  • 这似乎应该导致 getResponseCode() 开始抛出 TimeOutExceptions。做到了?我有类似的问题,正在寻找简单的解决方案,而不必自己编程超时。
【解决方案2】:

您可能在较高层有一个 try catch 块,它正在捕获 sockettimeout 异常。

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多