我在应用启动时从不同的网站下载了一些图片:
Picasso.with(context).load(image_url).fetch();
现在,假设用户关闭了应用并转为离线。当应用程序再次启动时,Picasso会以这种方式显示图像:
Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);
问题是某些图像是从磁盘缓存加载的(调试模式下的黄色三角形),而其他图像则是Picasso显示占位符。
为什么呢?我希望每个图像都是从磁盘缓存中加载的。
答案 0 :(得分:33)
您可以通过此策略使用此代码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);
}
});
答案 1 :(得分:9)
答案 2 :(得分:6)
这个逻辑对我有用:
if network is available:
Picasso.with(context).load(image).into(imageView);
else:
Picasso.with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(imageView);
答案 3 :(得分:4)
类路径上是否有OkHttp和Okio? (或在您的依赖项中) 因为默认情况下Picasso让HttpClient处理缓存 (默认情况下不会这样做)
您有2个选项
答案 4 :(得分:1)
为避免创建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);
}
});