在我的Android应用程序中,我正在尝试使用httpclient和httpget获取网站。 它在模拟器和我的HTC Desire HD上工作正常。 但是当我从wifi断开连接并尝试在3G网络上获取te网页时,响应有时是不完整的。 我使用以下代码来获取网页:
public String htmlBody (String strURI)
{
String strBody = "";
HttpClient httpclient = new DefaultHttpClient();
//HttpProtocolParams.setUseExpectContinue(httpclient.getParams(), false);
try {
HttpGet httpget = new HttpGet(strURI);
HttpResponse response = httpclient.execute(httpget, localContext);
HttpEntity entity = response.getEntity();
strBody = Functions.convertStreamToString(entity.getContent());
}
} finally {
httpclient.getConnectionManager().shutdown();
}
return strBody;
}
有没有办法确保响应完成?或者在回复不完整时恢复httpget?
答案 0 :(得分:1)
我最近遇到了同样的问题。经过几次实验,我猜我找到了答案: Android无法通过3G网络中的单个InputStream #read()调用读取完整响应。 以下代码可能有效:
InputStream in = entity.getContent();
int length = 0;
while (true) {
int ret = in.read(buffer, length, buffer.length - length);
if (ret == -1) break;
length += ret;
}
答案 1 :(得分:0)
只是一个想法:在响应结束时将您的网站设置为特殊字符,然后检查该字符是否存在。如果它在那里,你会知道你得到了完整的回复,如果它没有那么重新发送请求或什么!