我的Android应用程序需要使用DefaultHttpClient缓存来自Web服务调用的响应文本。缓存应该有效,直到Http响应头中设置的到期时间为止。
我发现了类似的问题,但他们抱怨DefaultHttpClient正在缓存他们的回复。有趣我需要它,但无法工作。或者建议基于文件的解决方案。
Does Android keeps the images downloaded from HTTP in cache?
how to do image caching in android
我写了一个示例应用,点击按钮请求提供网址,并打印响应状态和标题。
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缓存响应内容,并且在到期时间之前不再向服务器发送请求?
答案 0 :(得分:2)
这个CachingHttpClient可能就是你要找的,它只是DefaultHttpClient的装饰器。
注意android只包含HttpClient 4.0,为了使示例代码在android中运行,需要将依赖HttpClient 4.1和HttpClient Cache 4.1添加到你的项目中。答案 1 :(得分:0)
您可以使用this。
它是一个704kb的库,包含为Android编译的httpclient 4.1的并行实现。
它包含CachingHttpClient
和许多错误修复。但是,仅在内存缓存对您有用时才使用。因此,如果您的应用程序在一个会话期间多次进行相同的api调用,则性能影响将是可见的。