如何使Picasso在路径无效时显示默认图像

4

我有一个显示默认图片名称的问题,即R.drawable.avatar_placeholder。当来自Web服务的链接非空但错误404时,表示该链接路径上没有任何图像。如果我运行下面的函数,则会显示字符串“路径不为空”,但无法显示图像。欢迎任何建议。谢谢。

private void loadProfileDetails() {
        Logger.d(UI_LoginFragmentWithPin.class, "loadProfileDetails profile image: " + PrefUtils.readString(Constant.PREF_PROFILE_IMAGE));
        if (!TextUtils.isEmpty(PrefUtils.readString(Constant.PREF_PROFILE_IMAGE))){
            Utils.println("path not empty");
            LPicasso.getInstance(getActivity())
                    .load(PrefUtils.readString(Constant.PREF_PROFILE_IMAGE))
                    .config(Bitmap.Config.RGB_565)
                    .resize(200, 200)
                    .centerCrop()
                    .into(imgProfile);
        }else {
            Utils.println("path empty");
            LPicasso.getInstance(getActivity())
                    .load(R.drawable.avatar_placeholder)
                    .config(Bitmap.Config.RGB_565)
                    .resize(200, 200)
                    .centerCrop()
                    .into(imgProfile);

        }
        tvEmail.setText(PrefUtils.readString(Constant.PREF_EMAIL));
        tvName.setText(PrefUtils.readString(Constant.PREF_USER_NAME) + " " + PrefUtils.readString(Constant.PREF_USER_SURNAME));
    }

1
只需添加.error(R.drawable.placeholder) - Rajesh
@Rajesh Kushvaha 好甜啊....!!! 谢谢。 - kggoh
3个回答

4

尝试这样做:

将错误图片设置为您的占位图像。

    if(!PrefUtils.readString(Constant.PREF_PROFILE_IMAGE).equals("")) 
    {
        Picasso.with(context).load(PrefUtils.readString(Constant.PREF_PROFILE_IMAGE)).resize(200,200).centerCrop().error(R.drawable.avatar_placeholder).into(imgProfile);
    }
    else
    {
        Picasso.with(context).load(R.drawable.avatar_placeholder).error(R.drawable.avatar_placeholder).resize(200,200).centerCrop().into(imgProfile);
    }

gradle:

    compile 'com.squareup.picasso:picasso:2.5.2'

这些条件真的必要吗?如果图像不存在,.error(..) 方法本身会处理它。 - Paras Jain
顺便提一下,如果(!PrefUtils.readString(Constant.PREF_PROFILE_IMAGE).equals("")),当SharePreference中的值为null时会崩溃。最好采用另一种方式,即if("".equals(!PrefUtils.readString(Constant.PREF_PROFILE_IMAGE)))。 - kggoh

3

试一下这个:

    Picasso.with(this)
     .load("YOUR IMAGE URL HERE")        
     .placeholder(DRAWABLE RESOURCE)       
     .error(DRAWABLE RESOURCE)      // Image to load when something goes wrong 
     .resize(width, height)                            
     .rotate(degree)                                 
     .into(imageView);

你的回答和用户2025187的回答有什么不同? - Dileep Patel
他的回答在我之前发布了。你不能在3分钟内发布两个回答。 - Kiran Koravi

-2

Picasso不能很好地管理Android内存,速度也很慢,因此我强烈建议您不要使用它,而是使用Glide库。

(您可以使用Glide下载图像并将其变成圆形,下载图像位图等等)

添加到Gradle:

repositories { mavenCentral() // jcenter()也可以,因为它从Maven Central中获取}

dependencies { compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0' }

只需:

加载图片:

Glide.with(this).load("URL").into(imageView);

你可以通过Glide添加更多的功能,例如如果你想要在照片加载之前添加一个占位符,只需添加.placeholder():

Glide.with(this).load("URL").placeholder(R.drawable.placeholder).into(imageView);

如果你想在图片加载失败或出现问题时显示一张备用图片,只需添加 .error()。

:

Glide.with(this).load("URL").error(R.drawable.error).placeholder(R.drawable.placeholder).into(imageView);


1
感谢您的建议。由于我的当前项目正在使用Picasso,我会在有空闲时间时尝试您的建议。正如您所知,我们正赶着完成这个项目。 :P - kggoh

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