如何从毕加索的缓存中检索图像?

时间:2013-08-28 10:36:39

标签: android http caching storage picasso

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

              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作为图像/将位图设置为离线模式下的壁纸?

2 个答案:

答案 0 :(得分:5)

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

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

如果您指的是磁盘缓存,那么毕加索目前不支持这种情况。这是设计原因,因为磁盘层缓存是由HTTP层完成的,并没有区分它。

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

答案 1 :(得分:1)

Picasso确实处理了缓存并下载了你只需将它放在你的目标图像视图中,类似于Aquery

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