1

在我的 Android 应用程序中,我试图使用 httpclient 和 httpget 获取网站。它在模拟器和我的 HTC Desire HD 上运行良好。但是当我断开 wifi 并尝试在 3G 网络上获取网页时,响应有时不完整。我正在使用以下代码来获取网页:

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?

4

2 回答 2

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;
}
于 2012-07-22T08:09:09.757 回答
0

只是一个想法:让您的网站像一个特殊字符一样放在响应的末尾,然后检查该字符是否存在。如果它在那里,你会知道你得到了完整的回复,如果没有,那么重新发送请求或其他东西!

于 2011-03-31T19:53:22.320 回答