问题描述
我有数据库表,有一列“image_link”,所以当我打开活动时,毕加索班级得到这个 image_link 并显示图像。但是现在我的专栏中也可能有图像路径而不是图像链接,但无论如何我都需要显示图像,我认为如果我这样做的话它会起作用:
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
Picasso.get().load(favouriteTemplates.get(position).getimageLink()).into(holder.icon);
if(holder.icon.getDrawable() == null){
Picasso.get().load(new File(favouriteTemplates.get(position).getimageLink())).into(holder.icon);
}
}
但我知道,使用 Picasso 将图像下载到 imageview 需要一些时间,所以我的“如果”总是正确的。我该如何解决?
解决方法
Yoy 可以为其添加回调,如果收到错误,您可以执行一些操作。它的字面意思是毕加索无法加载该图像。
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
Picasso.get().load(favouriteTemplates.get(position).getImageLink()).into(holder.icon,Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
Picasso.get().load(new File(favouriteTemplates.get(position).getImageLink())).into(holder.icon);
}
} );
}
或者,您也可以使用 placeholder
,但您必须在调用 .into
之前将其提供给 picasso,并且因为它需要 IO 来加载每个图像,所以我不建议这样做。
Picasso.get()
.load(favouriteTemplates.get(position).getImageLink())
.into(holder.icon),new Callback() {
@Override
public void onSuccess() {
//Do Nothing
}
@Override
public void onError(Exception e) {
Picasso
.get()
.load(newmFile(favouriteTemplates.get(position).getImageLink()))
.into(holder.icon);
}
}
);