【问题标题】:Android Volley - Some disc cached images dont get displayed?Android Volley - 一些磁盘缓存的图像不显示?
【发布时间】:2013-07-01 17:45:50
【问题描述】:

我遇到了这个奇怪的错误,有些图像像往常一样被缓存,有些则没有,知道为什么吗? 两个图像都可以正常显示并缓存内存,但是离线时会显示一些错误图像。

例如,这很好用: http://cs4381.vk.me/u73742951/a_58a41ac2.jpg

但是,这不是:http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Android_robot.svg/220px-Android_robot.svg.png

显示和内存缓存都可以正常工作,但第二个没有从磁盘缓存中显示,虽然我认为我看到它被保存了,因为应用程序说它在系统设置中有 12kB 缓存

编辑

我检查了 Volley 的一个干净副本,它做同样的事情。它绝对是一个错误... 从我发现它的图像确实被缓存了,但是Bitmap cachedBitmap = mCache.getBitmap(cacheKey);总是返回null,所以缓存说它没有位图然后继续下载它,并且在离线时失败,奇怪

【问题讨论】:

  • 我检查了 Volley 的一个干净副本,它做同样的事情。它绝对是一个错误......
  • 不,我没有检查第二张图片的标题,但它可能没有缓存,因为它是从 svg 生成的
  • @Selvin 我猜你是对的,.svg 和我的项目图像上设置了“Cache-Control:max-age=0”,所以他们不希望被缓存,Volley 很荣幸? (对不起,我是新手)
  • 现在我不太确定......谷歌浏览器也发送max-age=0,但它在第二次从服务器调用时得到 304,因此即使对于生成的这个 svg,它也会从缓存中获取图像......跨度>

标签: android image-caching android-volley


【解决方案1】:

您没有收到任何点击的原因是因为 Volley 中用于磁盘缓存的默认行为取决于您请求的元素的 HTTP 标头(在您的情况下是图像)。

检查 volley 日志,看看是否收到“cache-hit-expired”消息 - 这意味着图像已被缓存,但就默认磁盘缓存而言,它的 TTL 已过期。

如果您希望使用默认设置,图像必须有一个 Cache-Control 标头,例如 max-age=???其中问号表示从下载时间算起的足够秒数。

如果你想改变默认行为,我不确定,但我认为你必须稍微编辑一下代码。

查看 Volley 源代码中的 CacheDispatcher 类。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    一种快速而肮脏的方式:

    private static class NoExpireDiskBasedCache extends DiskBasedCache
    {
        public NoExpireDiskBasedCache(File rootDirectory, int maxCacheSizeInBytes)
        {
            super(rootDirectory, maxCacheSizeInBytes);
        }
        public NoExpireDiskBasedCache(File rootDirectory)
        {
            super(rootDirectory);
        }
        @Override
        public synchronized void put(String key, Entry entry)
        {
            if (entry != null)
            {
                entry.etag = null;
                entry.softTtl = Long.MAX_VALUE;
                entry.ttl = Long.MAX_VALUE;
            }
    
            super.put(key, entry);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-13
      • 2016-01-29
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多