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