android Picasso不允许空字符串URL?

5sxhfpxr  于 2023-02-02  发布在  Android
关注(0)|答案(8)|浏览(165)

我有一个使用毕加索加载图像的取景器。数据库将返回一个URL的路径作为字符串。所以我有我的代码如下(使用Kotlin)

Picasso.with(context).load(url).error(placeholder).transform(transformation)
            .placeholder(placeholder).into(this)

它加载正常。但是,有时候URL是空的。我希望它加载占位符代替。但它崩溃了如下

java.lang.IllegalArgumentException: Path must not be empty.
    at com.squareup.picasso.Picasso.load(Picasso.java:297)

这将迫使我显式地执行检查,这是不理想的

if (url == null || url.isEmpty()) {
    Picasso.with(context).load(placeholder).transform(transformation).into(this)
} else {
    Picasso.with(context).load(url).error(placeholder).transform(transformation)
            .placeholder(placeholder).into(this)
}

当URL字符串为空而不是加载占位符时,Picasso会崩溃吗?

vsaztqbk

vsaztqbk1#

这可能太晚了,但我今天遇到了这个错误,在阅读了Picasso#加载方法的文档后,它指出传递空字符串将导致该方法抛出IllegalArgumentException,传递null不会抛出异常,但会触发RequestCreator#错误,如果提供了错误图像,则会加载错误图像,否则目标将不显示任何内容。
如果你没有控制这图象网址(说它来自服务器)你能尝试这下面:

mPicasso.load(photo.isEmpty() ? null : photo)
                .placeholder(placeholder)
                .error(error_placeholder)
                .into(target);
vnjpjtjt

vnjpjtjt2#

javadoc for Picasso.load()显式声明当URL为null或空时,它将抛出一个IllegalArgumentException异常,这就是我们所期望的。

uajslkp6

uajslkp63#

我希望它能帮助你:

if (item.getImagen().isEmpty()) { //url.isEmpty()
        Picasso.with(mContext)
                .load(R.drawable.placeholder)
                .placeholder(R.drawable.placeholder)
                .error(R.drawable.placeholder)
                .into(holder.imageView);

    }else{
        Picasso.with(mContext)
                .load(item.getImagen())
                .placeholder(R.drawable.placeholder)
                .error(R.drawable.placeholder)
                .into(holder.imageView); //this is your ImageView
    }
vlf7wbxs

vlf7wbxs4#

它晚了,但我遇到了同样的问题,我解决了只是通过一个URI,而不是网址。只是通过你的网址一样Uri.parse(url)
会是这样的

Picasso.with(context).load(Uri.parse(url).error(placeholder).transform(transformation)
            .placeholder(placeholder).into(this)
tyu7yeag

tyu7yeag5#

我建议你在载入毕加索之前检查一下绳子。

public static boolean isBlank(String string) {
    return TextUtils.isEmpty(string.trim());
}
pvabu6sv

pvabu6sv6#

警告:检查url字符串是否为空是不够的

你应该先修剪url字符串,然后再做空检查。否则像" "这样的字符串可能会破坏你的应用程序。
我就是这么用的。

if (imageUrl != null && imageUrl.trim().isEmpty())
{
    imageUrl = null;
}

Picasso.with(mContext)
    .load(imageUrl) // its safe to pass null, but not "" or " "
    .placeholder(R.drawable.placeholder)
    .into(mImageView);

检查毕加索的源代码来了解原因。
关于该专题的讨论:https://github.com/square/picasso/issues/609

yzckvree

yzckvree7#

您可以使用以下方法检查url是否为空

if(!TextUtils.isEmpty(url.trim()) && url.trim().length >0){
    if(Patterns.WEB_URL.matcher(url).matches()){

    }
}

源URL验证:How to check if URL is valid in Android

3htmauhk

3htmauhk8#

是的,picasso需要非空值,所以我建议使用帮助器TextUtils来处理这个问题。这里是一个例子。

String imagenUser = listaComentarios.get(position).getAvatar();
 
if (TextUtils.isEmpty(imagenUser)) {
  Toast.makeText(context, "Avatar imagenes", Toast.LENGTH_LONG).show();
  holder.imagen_usuario.setImageResource(R.mipmap.ic_launcher);
} else {
  Picasso.get()
    .load(imagenUser)
    .fit()
    .centerCrop()
    .transform(new CircleTransform())
    .into(holder.imagen_usuario);
}

相关问题