首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >脱机时使用Picasso从磁盘缓存加载图像

脱机时使用Picasso从磁盘缓存加载图像
EN

Stack Overflow用户
提问于 2014-04-30 22:58:29
回答 3查看 30.9K关注 0票数 25

我有一些图片,当应用程序启动时,我从不同的网站下载,通过这样做:

Picasso.with(context).load(image_url).fetch();

现在,假设用户关闭应用程序并脱机。当应用程序再次启动时,毕加索会以这种方式显示图像:

Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);

问题是一些图像是从磁盘缓存中加载的(调试模式下的黄色三角形),而对于其他图像,Picasso显示占位符。

为什么?我希望每个图像都是从磁盘缓存中加载的。

EN

回答 3

Stack Overflow用户

发布于 2015-12-03 03:30:49

您可以通过此策略使用此代码,Picasso将在缓存中查找图像,如果失败,则将通过网络下载图像。

 Picasso.with(context)
                    .load(Uri.parse(getItem(position).getStoryBigThumbUrl()))
                    .networkPolicy(NetworkPolicy.OFFLINE)
                    .into(holder.storyBigThumb, new Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {
                            // Try again online if cache failed
                            Picasso.with(context)
                                    .load(Uri.parse(getItem(position)
                                            .getStoryBigThumbUrl()))
                            .placeholder(R.drawable.user_placeholder)
                            .error(R.drawable.user_placeholder_error)
                                    .into(holder.storyBigThumb);
                        }
                    });
票数 38
EN

Stack Overflow用户

发布于 2016-07-02 06:45:01

这个逻辑在我身上起作用了:

if network is available:
    Picasso.with(context).load(image).into(imageView);
else:
    Picasso.with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(imageView);
票数 7
EN

Stack Overflow用户

发布于 2018-07-19 16:12:14

要避免创建单独的RequestCreator like here实例,请执行以下操作:

 RequestCreator request = mPicasso.load(TextUtils.isEmpty(imageUrl) ? null : imageUrl)
                    .placeholder(R.drawable.ic_default)
                    .error(R.drawable.ic_default)
                    .transform(transformations)
                    .noFade()
                    .centerCrop();
            request
                    .networkPolicy(NetworkPolicy.OFFLINE)
                    .into(mImageView, new Callback.EmptyCallback(){
                        @Override
                        public void onError() {
                            super.onError();
                            request.into(mImageView);
                        }
                    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23391523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档