【问题标题】:How to retrieve images from cache memory in picasso?如何从毕加索的缓存中检索图像?
【发布时间】:2013-08-31 09:19:39
【问题描述】:

我正在使用 picasso 库来加载图像。在默认的 picasso 中,它使用内部缓存来加载图像。但是根据我的应用程序配置,我必须使用外部缓存(磁盘缓存)。 所以我将此代码用于磁盘上的缓存

              File httpCacheDir = new File(getApplicationContext().getExternalCacheDir(),"http");
                long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
               HttpResponseCache.install(httpCacheDir, httpCacheSize);}

毕加索很灵活。所以现在它将图像缓存在外部 SD 卡中..

缓存存储在 sdcard/android/data/packagename/cache/http 缓存存储在“.1”、“.0”中。格式 所以我只是打开它们并将“.1”更改为“.jpg”。它提供了我需要的确切图像。 但是如何以编程方式进行?但是毕加索本身会将我的内存缓存到我的应用程序中以将图像加载到imageview中。但是我必须将它们作为图像直接保存到sdcard中/在离线模式下将位图设置为墙纸?

【问题讨论】:

  • 如果你有文件路径并且你很确定文件存储以 .0 或 .1 结尾,那么只需获取文件名并将 0 或 1 替换为 jpg
  • @Usman Kurd 文件名看起来像在 Md5 哈希中加密......超过 40 个字。
  • @AndroSelva 将它们保存到 sdcard 中而无需再次下载或直接设置为壁纸..

标签: android http caching storage picasso


【解决方案1】:

在构建 Picasso 实例时,您可以提供自己的 Cache 实现。通过这种方式,您可以提供额外的方法,您可以调用这些方法直接从内存缓存中检索位图。使用Picasso.Builder 为其提供您自己的实现。当您使用with() 时,您使用的是静态单例内部实例,该实例设置了大多数默认值(大多数应用程序都需要默认值。)

保留您的Cache 实现的引用并直接与之交互。 Picasso 旨在为您处理加载/解码和缓存,但您没有理由不能围绕它进行构建。

如果您指的是磁盘缓存,那么目前没有 Picasso 不支持它。这是设计使然,因为磁盘层缓存是由 HTTP 层完成的,没有区别。

但是,您可以更改磁盘缓存的路径。如果您使用 OkHttpDownloader,则在构建下载器时提供不同的文件。同样,对于 UrlConnectionDownloader,您可以扩展它并覆盖 load() 方法。

【讨论】:

  • 嘿,我的问题是错误的。sdcard 内存/内部内存这不是问题,我不想从外部/直接访问缓存。我只想从 picasso 本地访问。当图像已加载到 imageview 中,我只想将图像保存到 sd 卡中。有可能吗?
  • 所以让我直截了当地说,您正在尝试更改文件的存储位置,而不是内部文件,您希望它们存储在 sdcard 中吗?您可以使用 OkHttpDownloader 并在创建它时传入所需的 cacheDir,或者如果您使用 UrlConnectionDownloader 扩展它并实现类似于基类所做的 load() 方法。我正在更新我的回复。
  • 我正在制作拥有 1000 多张照片的在线图库应用程序。应用程序功能是“设置为主屏幕壁纸”和“保存到 SD 卡”。每当图像加载到 imageview 中时,用户可以立即“将其设置为墙纸”或“保存 2 个 SD 卡”。因此我想从缓存或任何其他方法访问位图。但是创建新的缓存并检索它非常困难对我来说。我想访问 Picasso api 的内部。我已经尝试了一个星期。请帮助我。
  • 但是您为内存提供了Cache 实现,您可以为磁盘缓存访问提供File。如果您将它们传递给 Picasso,那么您没有理由不保留它们以访问特定 URL 的位图。我这里没看出问题,你也可以使用 Picassosget() 方法,使用同一个key从缓存(内存或磁盘)同步加载一个位图,并保存到SD卡中。
  • 我试过这样的东西,位图 b=cache.get(Url)。但它不起作用。我不知道如何获得关键值。谢谢你的回应
【解决方案2】:

Picasso 确实处理其中的缓存和下载,您只需将其放置在类似于 Aquery 的目标图像视图中

根据The Corner Square Engineering blog 毕加索自己处理下载缓存并将其处理程序提供给用户使用它并将图像放置在图像视图中

【讨论】:

  • U r right.u 可以使用外部磁盘缓存。毕加索也很灵活。毕加索本身在 ExtenalsdCard 中创建缓存并将其句柄提供给用户使用并将图像放置在 imageview 中。但我想保存它们在 sdcard asimges 来自缓存内存..
猜你喜欢
  • 2014-04-10
  • 2019-09-14
  • 2015-10-16
  • 2015-05-07
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
相关资源
最近更新 更多