我的
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添加到你的项目中.