毕加索图像错误

Picasso ImageError

我正在使用 Picasso 在我的 android App.I 中显示来自服务器的图像 App.I 有 5 张图像 URL (HTTP 格式)从服务器获取并将其存储在字符串中 value.If 我向 Picasso(.jpg 格式)发送正确的 link 它可以正确运行并在我的图像视图中显示我的图像,如果在(.pdf 格式)中发送错误的 link 它会在我的图像中显示错误查看,但是当我从我的服务器传递空值或空值到字符串时,我的应用程序崩溃它的 运行 if 语句首先即使它的值为 null 或空 else 语句不是 运行 我应该更新什么在我的代码中,如果我从服务器获取空值,我的图像视图应该显示并且错误和文本视图值应该被更改。

// 代码仅在我的 If/Else 开始处:

    if (image_fourth != null && image_fourth != ""){
        Picasso.get().load(image_fourth).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image1);
        image1.setVisibility(View.VISIBLE);

        buttons.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (image_second == null){
                    image_2t.setText("Image Not Found");
                    image_2t.setVisibility(View.GONE);


                }
                else if (image_second != null){
                    Picasso.get().load(image_second).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image2);
                    image2.setVisibility(View.VISIBLE);
                    image_2t.setText("Image 2");
                    image_2t.setVisibility(View.VISIBLE);
                }
            }
        });
    }
    else{
        image_1t.setText("Image Not Found");
    }

您可以尝试反转 if/else 语句。据我所知,Picasso 不能在 load() 中使用 null 或空字符串。在您的情况下,如果 string/url 源为空,则 if 语句可以覆盖您可以加载占位符:

    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)
}

另一种选择可能是保持您的 if 语句不变,但将其添加到 else 语句中:

else
        image_fourth.setImageResources(R.mipmap.ic_launcher);

我在 Glide 中使用过类似的技术。那对我有用。有关详细信息,您可以查看此 Whosebug 答案:

只需在语句之间切换并检查它是否有效?

if (image_fourth == null || image_fourth == ""){
//write your else statement here
}else{
//And if code is here
}

使用Glide而不是Picasso,那么你不需要添加任何其他条件或代码来检查字符串是否为空, 检查此示例

Glide.with(activity_context)
                .load(your_url)
                .placeholder(R.drawable.default_image)
                .error(R.drawable.default_image)
                .override(200, 200)
                .centerCrop()
                .dontAnimate()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(mHolder.imgIcon); 

您可以找到有关 Glide 的更多信息here

如果您想继续使用 Picasso,请尝试此代码,这可能对您有所帮助

if(!TextUtils.isEmpty(Url)) {

            Picasso.with(activity).load(Url.replace(" ", "%20")).error(R.drawable.default_image).networkPolicy(NetworkPolicy.NO_CACHE)
                    .memoryPolicy(MemoryPolicy.NO_CACHE)

                    .into(imageView, new Callback() {

                        public void onSuccess() {
                            System.out.println(" 02062015:onSuccess");


                        }

                        @Override
                        public void onError() {
                            imageView.setImageResource(R.drawable.default_image);
                            System.out.println(" 02062015:onError");

                        }
                    });
        }