如何在Android中使用Picasso库实现自己的磁盘缓存?

23

我正在使用 Picasso 库为我的应用加载图片。但是我不知道如何在 Picasso 库中实现自己的磁盘(SD 卡)缓存。


如果我推荐一个我曾经使用过的、易于设置并且在内存和磁盘上都能工作的、高度可配置的Picasso替代品,这会有帮助吗? - Boris Strandjev
1
Picasso应该已经为您执行了磁盘缓存。您需要使用自定义磁盘缓存来完成什么Picasso不能做的事情? - Bobbake4
@Bobbake4:我只想将图像缓存到SD卡的自定义文件夹中。 - Dax
1
Picasso默认使用OkHttp进行缓存。如果要自定义缓存大小,可以使用此链接:https://gist.github.com/fada21/10655652。 - fada21
2个回答

36

1
嗨,我的照片在 Picasso 缓存目录中,但日志显示:发送进度 READING_FROM_CACHE,缓存内容不可用、已过期或已禁用。有什么想法吗?谢谢。 - wendigo

5

@Dax,为了在OkHttp中使用自定义缓存目录保存文件,我会编写类似于以下代码:

OkHttpClient okHttpClient = new OkHttpClient();
File customCacheDirectory = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/MyCache");
okHttpClient.setCache(new Cache(customCacheDirectory, Integer.MAX_VALUE));
OkHttpDownloader okHttpDownloader = new OkHttpDownloader(okHttpClient);
Picasso picasso = new Picasso.Builder(mainActivity).downloader(okHttpDownloader).build();
picasso.load(imageURL).into(viewHolder.image);

希望这能帮到你。

seCache 未被识别? - umerk44
@umerk44,你说得对,setCache()已经不再支持了。那段代码片段来自2.x版本,但在3.x中,他们用构建器模式替换了setter(请参见https://github.com/square/okhttp/blob/master/CHANGELOG.md)。因此,在3.x中,你可以这样做:OkHttpClient.newBuilder().cache(cache)... - Gaurav B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接