【发布时间】:2013-08-15 13:20:16
【问题描述】:
在一个 Android 应用中,我正在尝试测试用户是否有正常的互联网连接。有兴趣可以在上一个问题Detecting limited network connectivity in Android?有一些背景
代码基本上是这样的:
try {
HttpParams myParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(myParams, 10000);
HttpConnectionParams.setSoTimeout(myParams, 10000);
httpClient = new DefaultHttpClient(myParams);
request = new HttpHead(url);
response = httpClient.execute(request);
statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200)
{
return false;
}
return true;
} catch(Exception e) {
return false;
}
我可以使用 HttpConnectionParams 控制连接和套接字的超时。但是,如果我的设备已连接到 Wifi,但 wifi 无法访问 Internet,我在异常中遇到的错误是:
libcore.io.GaiException:getaddrinfo 失败:EAI_NODATA(无地址 与主机名相关联)
无法解析主机“www.example.com”:没有关联的地址 主机名
这看起来像是在 DNS 查找中超时。我可以控制 DNS 查找的超时时间吗? httpClient.execute 需要大约 45 秒才能失败,但上述异常除外。我希望它早点放弃。
【问题讨论】:
标签: java android http networking connectivity