Неполный ответ после httpget на 3g Android - PullRequest
1 голос
/ 31 марта 2011

в моем приложении для Android я пытаюсь получить веб-сайт, используя httpclient и httpget. он отлично работает на эмуляторе и на моем HTC Desire HD. но когда я отключаюсь от Wi-Fi и пытаюсь получить веб-страницу в сети 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, если ответ неполон?

Ответы [ 2 ]

1 голос
/ 22 июля 2012

Я недавно столкнулся с той же проблемой с вами.После нескольких экспериментов, я думаю, я нашел ответ: Android не будет читать полный ответ с помощью одного вызова InputStream # read () в сети 3G.Следующий код может работать:

InputStream in = entity.getContent();
int length = 0;
while (true) {
    int ret = in.read(buffer, length, buffer.length - length);
    if (ret == -1) break;
    length += ret;
}
0 голосов
/ 31 марта 2011

Просто мысль: сделайте так, чтобы ваш сайт ставился как специальный символ в конце ответа, а затем проверьте, существует ли этот символ. Если это так, вы узнаете, что получили полный ответ, если нет, то повторно отправьте запрос или что-то в этом роде!

...