Android HttpURLConnection非常慢
以下代码就是我面临的情况: 如您所见,我正在尝试读取HTTP流。当我在Android模拟器上运行以下代码时,它会100%工作;当我在Galaxy S3上运行以下代码时,它会100%工作;当我尝试使用笔记本电脑浏览器连接URL时,它会100%工作;当我尝试使用Galaxy S3浏览器(wifi和3G)连接时,它会工作。。。100%的时间。然而,当我在Wi-Fi上尝试使用Galaxy S3连接时,我有80%的时间超时。如果删除超时属性,会出现奇怪的异常,例如:Android HttpURLConnection非常慢,android,timeout,httpurlconnection,galaxy,Android,Timeout,Httpurlconnection,Galaxy,以下代码就是我面临的情况: 如您所见,我正在尝试读取HTTP流。当我在Android模拟器上运行以下代码时,它会100%工作;当我在Galaxy S3上运行以下代码时,它会100%工作;当我尝试使用笔记本电脑浏览器连接URL时,它会100%工作;当我尝试使用Galaxy S3浏览器(wifi和3G)连接时,它会工作。。。100%的时间。然而,当我在Wi-Fi上尝试使用Galaxy S3连接时,我有80%的时间超时。如果删除超时属性,会出现奇怪的异常,例如: "recvfrom failed: E
"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"
更新:
-使用AndroidHttpClient不起作用
-在获得输入流之后,我在eclipse IDE中弹出了一个错误。。。如您所见,我的调试光标一直指向第107行。。好吧,在我这次得到输入流之后。。。
作为一个实验,如果您尝试使用
AndroidHttpClient
类来做同样的事情,会怎么样?它有一些预定义的超时和其他设置,我们被告知,这些设置在大多数情况下应该可以正常工作。作为一个实验,如果您尝试使用AndroidHttpClient
类来做同样的事情,会怎么样?它有一些预定义的超时和其他设置,我们被告知,在大多数情况下应该可以正常工作。我在Android设备上也遇到了同样的问题。我在url中使用IP地址。最后,我发现HttpURLConnection.connect(…)方法在内部涉及getHostName()。在那之后,我在url中使用域,然后它100%的时间工作 我在安卓设备上也遇到了同样的问题。我在url中使用IP地址。最后,我发现HttpURLConnection.connect(…)方法在内部涉及getHostName()。在那之后,我在url中使用域,然后它100%的时间工作 谢谢,我会试一试,然后回复。不过,我确实尝试过使用org.apache.http.client.HttpClient,得到了相同的结果。谢谢,我会尝试一下,然后回复。但是,我确实尝试过使用org.apache.http.client.HttpClient,得到了相同的结果。
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();
}
}
}