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

最佳答案

我最近也遇到了同样的问题。经过几次实验,我想我找到了答案:
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;
}

关于android - 在3g Android上httpget后响应不完整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5505425/

10-10 19:57