这是我使用以下代码所面临的情况:
如您所见,我正在尝试读取 HTTP 流。当我在 Android 模拟器上运行以下代码时,它可以 100% 运行浏览器它在 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 行 .. 在我完成之后这次的输入流...