Android Picasso:在将图片加载到ImageView之前检查图像URL是否存在

6

我目前正在使用数据绑定实现RecyclerView,在从API获取的url列表(/images/slider/my/myImage.jpg)中加载图像。

@BindingAdapter("imageUrl")
public static void loadImage(ImageView imageView, String imageUrl){
    Picasso.with(imageView.getContext()).load(CommUtils.WEBSITE_LINK + imageUrl).into(imageView);
}

目前我在我的ListAdapter中有以上的代码。当url正确或存在于服务器时,该代码能够很好地加载图像,否则它将显示为空白。因此,我想创建一个情况,以检查图像是否存在/链接是否正确,然后再进行显示操作。
我想要实现的目标是:
if(Image Link exist){
//Load Image, Picasso.with.................
} else {
//Use Dummy Photo, Picasso.with..................
}

[编辑] 现在我知道可以使用error()函数来创建另一个加载,如果路径不存在。那么如果我的API返回两种不同的格式或“url”,可能是带路径(/images/slider/my/myImage.jpg)或不带路径(myImage.jpg)怎么办? 因此,在我的代码中,我想做一些像这样的事情

if(websitelink + ImageUrl){ load image }
else(websitelink + path + ImageUrl) { load iamge} //Should this code run under error() from the first case??

我能否先对ImageUrl进行检查,而不是直接加载图像,并且只有在出现错误时才进行更改?


请移除这个重复的内容,它不会解决我的问题。 - Shawn.Y
2个回答

7

Picasso支持占位图和错误图像:

Picasso.get()
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

因此,如果您想要实现的仅仅是在加载失败时显示某些错误图像,那么这就是您需要的全部内容。


4
您可以使用com.squareup.picasso.Callback来监听响应结果。
Picasso.with(getContext())
    .load(url)
    .placeholder(R.drawable.image_name) // Your dummy image...
    .into(imageView, new com.squareup.picasso.Callback() {
         @Override
         public void onSuccess() {
             // Image is loaded successfully...
         }

         @Override
         public void onError() {
             // Unable to load image, may be due to incorrect URL, no network...
         }
    });

如果使用这个,用户在onError()部分,仍然能够加载另一个新的Picasso图像吗? - Shawn.Y
是的,在onError()中可以进行第二次调用。 - Gokul Nath KP

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