【问题标题】:How to use Android's CacheManager?如何使用 Android 的 CacheManager?
【发布时间】:2010-12-25 05:33:04
【问题描述】:

我目前正在开发一个使用 http 请求获取图像的 Android 应用程序。如果我可以缓存这些图像以提高性能和带宽使用率,那就太好了。

我在 Android 参考资料中看到了 CacheManager 类,但我真的不知道如何使用它,也不知道它到底有什么作用。

我已经了解了这个例子,但我需要一些帮助来理解它:

/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java

另外,参考说明:

“向此组件提供网络请求,如果缓存无法解析它们,则将 HTTP 标头酌情附加到重新验证内容的请求中。”

我不确定这意味着什么或它对我的工作方式,因为 CacheManager 的 getCacheFile 只接受一个字符串 URL 和一个包含标题的 Map。不知道提到的附件是什么意思。

一个解释或一个简单的代码示例真的会让我很开心。谢谢!

更新

这就是我现在所拥有的。我显然做错了,只是不知道在哪里。

公共静态位图getRemoteImage(字符串imageUrl){ URL aURL = null; URLConnection 连接 = 空; 位图 bmp = null; CacheResult cache_result = CacheManager.getCacheFile(imageUrl, new HashMap()); if (cache_result == null) { 尝试 { aURL = 新 URL(imageUrl); conn = aURL.openConnection(); 连接.connect(); InputStream = conn.getInputStream(); cache_result = new CacheManager.CacheResult(); copyStream(就是,cache_result.getOutputStream()); CacheManager.saveCacheFile(imageUrl, cache_result); } 捕捉(异常 e){ 返回空值; } } bmp = BitmapFactory.decodeStream(cache_result.getInputStream()); 返回 bmp; }

【问题讨论】:

  • 这段代码有什么错误?
  • E/AndroidRuntime(3097):致命异常:主要 E/AndroidRuntime(3097):java.lang.NullPointerException E/AndroidRuntime(3097):在 android.webkit.CacheManager.saveCacheFile(CacheManager.java :459)是我尝试保存到缓存时得到的,如果可能的话,我想知道如何添加赏金。 E/AndroidRuntime(3097): 在 android.webkit.CacheManager.saveCacheFile(CacheManager.java:453)

标签: android caching httpwebrequest


【解决方案1】:

我不认为 CacheManger 可以在 WebView 之外使用,如本错误报告中所述 http://code.google.com/p/android/issues/detail?id=7222

【讨论】:

【解决方案2】:

我不久前也遇到过这个问题。缓存管理器仅适用于 webview,除此之外并没有真正的用处。对于我的应用程序,我需要缓存 xml 响应和图像,所以我最终编写了自己的缓存管理器来完成这个任务。没有什么太可怕的了,但肯定不如使用内置的那么容易。

如果您对具体细节有任何疑问,请在我的帖子中添加评论,我会经常查看。

【讨论】:

  • 您能否提供有关实施的更多细节?
  • @sabbour 你想知道什么?基本上我打开了一个 http 流并将其写入文件。当我的应用程序访问该文件时,它会检查文件的年龄,如果它太旧,它会删除它,以便我的应用程序知道下载新副本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多