这是我面对以下代码所面临的情况:
正如您所看到的,我正在尝试读取HTTP流。当我在Android模拟器上运行以下代码时,它可以100%的时间工作,当我在Galaxy S3上运行以下代码而在3G上它100%的时间工作,当我尝试使用我的笔记本电脑连接到URL时浏览器100%的时间工作,当我尝试使用Galaxy S3浏览器(在wifi和3g)连接时,它可以工作...... 100%的时间。但是,当我尝试在Wi-Fi上使用Galaxy S3进行连接时,我会在大约80%的时间内使用。如果我删除超时属性,我会得到奇怪的例外,例如:
"recvfrom failed: ETIMEDOUT"
"failed to connect to <URL>: connect failed: ENETUNREACH (Network is unreachable)"
"unable to resolve the host <URL>: no address associated with hostname"
我愿意接受任何建议......
public static final String getHttpResponse(String url)
{
HttpURLConnection conn = null;
InputStream response = null;
try {
URL address = new URL(url);
conn = (HttpURLConnection)address.openConnection();
conn.setConnectTimeout(30 * 1000); //30 seconds
conn.setReadTimeout(30 * 1000); //30 seconds
response = conn.getInputStream();
if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
Log.e("Util.getHttpResponse", Integer.toString(conn.getResponseCode()));
return null;
}
String result = Util.streamToString(response);
return result;
} catch(IOException e) {
response = conn.getErrorStream();
Log.e("Util.getHttpResponse", Util.streamToString(response));
return null;
} finally {
if( response != null ) {
try {
response.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null) {
conn.disconnect();
}
}
}
更新: - 使用AndroidHttpClient无法正常工作 - 在获得输入流之后,我在eclipse IDE中弹出了一个错误...正如你所看到的那样,我的调试光标一直到第107行......这次我完成输入流后...
答案 0 :(得分:1)
我在Android设备上遇到了同样的问题。我在网址中使用了一个IP地址。最后,我发现HttpURLConnection.connect(...)方法在内部涉及getHostName()。之后,我在网址中使用域名,然后它在100%的时间内都可以使用。
答案 1 :(得分:0)
作为一项实验,如果您尝试使用AndroidHttpClient
类而不是这样做,该怎么办?它有一些预定义的超时和其他设置,我们被告知,在大多数情况下应该可以正常工作。