用毕加索检查 imageView 是否为空

问题描述

我有数据库表,有一列“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);
           }
      }
   );