毕加索不会将图像缓存到磁盘上。

3

我必须使用定制的OkHttpClient,以便在图像请求中添加头信息。问题是由于这个原因,Picasso不会将任何图像缓存到磁盘上。我已经使用了setIndicatorsEnabled(true) 来检查缓存情况,结果只显示红色指示器。当我使用默认的OkHttpDownloader时一切都正常。以下是我的Picasso初始化代码。是否有人遇到过相同的问题?

 public static void init(Context context) {
        Picasso.Builder builder = new Picasso.Builder(context);
        OkHttpClient client = new OkHttpClient();
        client.interceptors().add(new AuthInterceptor());
        Downloader downloader = new OkHttpDownloader(client);
        Picasso.setSingletonInstance(builder.downloader(downloader).build());
        Picasso.with(context).setIndicatorsEnabled(true);
    }

同时,这是我的图像下载代码。
 public static void load(final ImageView imageView, final Image image) {
            Picasso.with(imageView.getContext())
                    .load(image.getUrl())
                    .resize(400, 0)
                    .memoryPolicy(MemoryPolicy.NO_CACHE)
                    .into(imageView);
    }

如果您想要内存缓存,为什么要执行.memoryPolicy(MemoryPolicy.NO_CACHE)操作? - Bhargav
啊,既然这是在更改头文件时发生的,那么您很可能没有设置“Cache-Control”头。 - Bhargav
奇怪的是添加“header(“Cache-Control”,“max-age = 600”)”并不能起到帮助作用,Picasso仍然只使用网络。 - HellCat2405
此外,如果你从未看到过蓝色指示器,很可能是你的远程图片没有包含适当的缓存头来启用磁盘缓存,引用他的话。 - Bhargav
1
谢谢,所以我猜我得转用Glide。 - HellCat2405
显示剩余5条评论
1个回答

1

噢,由于您更改标题时发生了这种情况,您很可能没有设置Cache-Control标头

根据Jake Wharton的说法(Picasso的开发人员之一)

Picasso没有磁盘缓存。 它委托给您用于该功能的任何HTTP客户端(依靠HTTP缓存语义进行缓存控制)。 由于这个原因,您所寻求的行为是免费的。

摘自Jake Wharton的答案 here

还有,

如果您从未看到蓝色指示器,则很可能您的远程图像不包括适当的缓存标头以启用磁盘缓存


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