Как проверить кеширование в DefaultHttpClient на Android

Моему 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 кэшировал контент ответа и не отправил запрос на сервер снова до истечения срока действия?

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

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

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

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