如何在Android上的DefaultHttpClient中检查缓存

我的
Android应用程序需要使用DefaultHttpClient来缓存来自Web服务调用的响应文本.缓存应该有效,直到Http响应头中设置的到期时间.

我发现了类似的问题,但他们抱怨DefaultHttpClient正在缓存他们的回复.有趣我需要它,但无法工作.或者建议基于文件的解决方案.
Does Android keeps the images downloaded from HTTP in cache?
how to do image caching in 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 servlet代码是,

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

我编辑了servlet并发布了;客户端读取最新的更改.
我在Chrome浏览器上测试了servlet应用程序,缓存工作正常.

我在请求标头中添加了Cache-control属性,但没有得到预期的结果.

如何确保DefaultHttpClient缓存响应内容,并且在到期时间之前不再向服务器发送请求?

最佳答案 这
CachingHttpClient可能就是你要找的,它只是DefaultHttpClient的装饰器.

注意android只包含HttpClient 4.0,为了使示例代码在android中运行,需要将依赖HttpClient 4.1和HttpClient Cache 4.1添加到你的项目中.

点赞