在3g Android上使用httpget之后的响应不完整

时间:2011-03-31 19:45:40

标签: android httpclient http-get 3g

在我的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?

2 个答案:

答案 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)

只是一个想法:在响应结束时将您的网站设置为特殊字符,然后检查该字符是否存在。如果它在那里,你会知道你得到了完整的回复,如果它没有那么重新发送请求或什么!