微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Picasso 导致应用程序崩溃,说路径为空?代码在另一个适配器中工作

如何解决Picasso 导致应用程序崩溃,说路径为空?代码在另一个适配器中工作

我正在尝试通过调用适配器在用户搜索视图 (RecycleView) 中显示用户配置文件图像和用户名 - 下面的代码。但是在另一个适配器和配置文件页面等中工作的相同代码给出了空指针错误和崩溃?我似乎无法理解为什么,因为它在应用程序的所有其他地方都有效,但在这个适配器中无效?有人可以帮我理解并解决这个问题吗?该代码之前工作,但我随后从 CircularImageView 切换到 ShapeableImageView

请注意,我使用的是空检查,并且配置文件的路径/链接不为空,并且在其他地方也是如此...

AndroidRuntime: FATAL EXCEPTION: main
    Process: in.latom.latom,PID: 19549
    java.lang.IllegalArgumentException: Path must not be empty.
        at com.squareup.picasso.Picasso.load(Picasso.java:332)

适配器代码

class UserAdapter(mContext: Context,mUsers: List<Users>,isChatCheck: Boolean): RecyclerView.Adapter<UserAdapter.ViewHolder?>()
{

private val mContext: Context = mContext
private val mUsers:List<Users> = mUsers
private var isChatCheck: Boolean = isChatCheck

override fun onCreateViewHolder(viewGroup: ViewGroup,viewType: Int): ViewHolder {
    val view: View = LayoutInflater.from(mContext).inflate(R.layout.user_search_item_layout,viewGroup,false)
    return ViewHolder(view)
}

override fun getItemCount(): Int {
    return mUsers.size
}

override fun onBindViewHolder(holder: ViewHolder,position: Int) {
    val user: Users? = mUsers[position]
    val firstname = user?.getFirstName()
    val surname = user?.getSurName()
    val username = "$firstname $surname"
    holder.userNameText.text = username
    if(user!!.getProfile() != null) {
        Picasso.get().load(user.getProfile()).placeholder(R.drawable.ic_baseline_whatshot_24).fit().centerCrop().into(holder.profileImage)
    }
    //present tagline
        if((user.getRole() != "")) {
            val company = user.getCname()!!
            val tag = user.getRole()!!
            val companyrole = "$tag at $company"
            if (tag.isNotEmpty() && company.isNotEmpty()) {
                holder.tagline.text = companyrole
            } else {
                holder.tagline.text = tag
            }
        } else {
            holder.tagline.visibility = View.GONE
        }

    //Menu on Search Fragment
    holder.itemView.setonClickListener {
        val options = arrayOf<CharSequence>(
            "Send Message","Visit Profile"
        )
        val builder: AlertDialog.Builder = AlertDialog.Builder(mContext)
        builder.setTitle("What would you like to do?")
        builder.setItems(options,DialogInterface.OnClickListener {_,which ->
            if(which == 0)
            {
                val intent = Intent(mContext,MessageActivity::class.java)
                intent.putExtra("visit_id",user!!.getUID() )
                mContext.startActivity(intent)
            }
            if(which == 1)
            {
                val intent = Intent(mContext,VisitUserProfile::class.java)
                intent.putExtra("visit_id",user!!.getUID() )
                mContext.startActivity(intent)
            }

        })
        builder.show()
    }
}

class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
{
    var userNameText: TextView = itemView.findViewById(R.id.username)
    var tagline: TextView = itemView.findViewById(R.id.tagline_status)
    var profileImage: ShapeableImageView = itemView.findViewById(R.id.profile_image)
}

}

更新:

我通过将图像的下方 ViewHolder 行从 ShapeAbleImageView 更新为布局中定义的 ImageView 解决了该问题。我的错失良机!

var profileImage: ImageView = itemView.findViewById(R.id.profile_image)

解决方法

问题是在 findviewbyid 期间小部件声明不正确,必须执行 ImageView 但已执行 ShapeableImageView

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。