Как проверить кеширование в DefaultHttpClient на Android - PullRequest
4 голосов
/ 13 июля 2011

Моему приложению Android требуется кэшировать текст ответа на вызов веб-службы с помощью DefaultHttpClient.Кэш должен быть действителен до истечения времени, установленного в заголовке ответа Http.

Я нашел похожие вопросы, но они были жалобами на то, что DefaultHttpClient кэширует их ответы.Забавно, мне это нужно, но я не смог получить работу.Или есть решения, предлагаемые на основе файлов. Сохраняет ли Android изображения, загруженные с HTTP, в кэш? Как сделать кэширование изображений в Android

Я написал пример приложения, которое запрашивает URL при нажатии кнопки и печатает статус ответа и заголовки.

DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);         
HttpResponse response;
response = client.execute(request);
System.out.println("Response status - " + response.getStatusLine().getStatusCode());

И мой код сервлета GAE:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("text/plain");
    resp.setHeader("Expires", "Wed, 11 Jul 2012 12:00:00 GMT");
    resp.setHeader("Cache-Control", "max-age=2592000");
    resp.getWriter().println("Hi!");
}

Нажатие на кнопку каждый раз дает мне код состояния, равный 200. Я полагаю, что так должно быть только в первый раз.

Response status - 200
***** Response Headers *****
Content-Type - text/plain; charset=iso-8859-1
Expires - Wed, 11 Jul 2012 12:00:00 GMT
Cache-Control - max-age=2592000
Date - Wed, 13 Jul 2011 06:54:57 GMT
Server - Google Frontend
Transfer-Encoding - chunked

Я отредактировал сервлет и опубликовал;клиент читает последние изменения.Я протестировал приложение сервлета в браузере Chrome, и кэширование работает нормально.

Я добавил свойство Cache-control в заголовок запроса, но не получил ожидаемого результата.

Как обеспечитьDefaultHttpClient кэширует содержимое ответа и не отправляет запрос на сервер снова до истечения срока действия?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Этот CachingHttpClient , вероятно, то, что вы ищете, это просто декоратор DefaultHttpClient.

Обратите внимание, что android включает только HttpClient 4.0, чтобы пример кода работал в android, вам нужно добавить зависимости HttpClient 4.1 и HttpClient Cache 4.1 в ваш проект.

0 голосов
/ 08 июля 2012

Вы можете использовать this .

Это библиотека размером 704 КБ и содержит параллельную реализацию httpclient 4.1, скомпилированную для Android.Он содержит CachingHttpClient и множество исправлений ошибок.Однако используйте только если кэш в памяти полезен для вас.Таким образом, если ваше приложение делает один и тот же вызов API много раз в течение одного сеанса, влияние на производительность будет заметно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...