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

时间:2011-07-13 07:42:22

标签: android http httpclient

我的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缓存响应内容,并且在到期时间之前不再向服务器发送请求?

2 个答案:

答案 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调用,则性能影响将是可见的。