6

我使用的是HttpURLConnection来检查服务器URL是否可用或不使用下面的代码:HttpURLConnection的getResponseCode()DEOS不会返回如果没有互联网连接

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()没有执行(该功能不返回)。我怎样才能解决这个问题?

+0

尝试将代码段放在'TRY CATCH块'中。我怀疑是'(HttpURLConnection)knownURL.openConnection();'当没有互联网时抛出一个套接字异常,所以你没有到达'httpConnection.getResponseCode();' – 2014-11-03 06:54:23

+0

knownURL.openConnection()正在执行,它是没有来阻止。当调用getResponseCode() – mindus 2014-11-03 07:03:48

+0

尝试调试它时停止。是的,你会得到一个例外。这就是为什么。检查你的logcat,也许在这里发帖。 – Darpan 2014-11-03 07:20:06

回答

0

您可能在捕获sockettimeout异常的更高层有一个try catch块。

+0

试过仍然没有来拦截 – mindus 2014-11-04 05:17:10

4

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

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

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

+0

这看起来应该是导致getResponseCode()开始抛出TimeOutExceptions。做到了? 我有类似的问题,我正在寻找简单的解决方案,而不必自己编程超时。 – 2015-08-18 11:03:16

+0

这应该是公认的解决方案 – 2015-08-18 12:15:59

相关问题