问题描述
我正在尝试通过调用适配器在用户搜索视图 (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