我正在为一个学校项目开发一个使用kotlin的棋盘游戏管理应用程序,我也是使用Kotlin和Android Studio的新手。我决定让在线教程适应我的需求,这样我就可以构建自己的应用程序了。但是,当我启动应用程序时,这个错误就会出现,我不明白为什么:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
我尝试在调试模式下启动它,这样我可能会发现问题,但我不明白为什么会提到它可以是空的。
我使用一个实时的防火墙数据库,下面是我的BgAdapter的代码,其中出现了致命的异常:
class BgAdapter(
val context: MainActivity,
private val bgList: List<BgModel>,
private val layoutId: Int) : RecyclerView.Adapter<BgAdapter.ViewHolder>() {
//Boîte pour ranger tout les composants à contrôler
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val bgImage = view.findViewById<ImageView>(R.id.image_item)
val bgName: TextView? = view.findViewById(R.id.name_item)
val bgEditor: TextView? = view.findViewById(R.id.editor_item)
val bgFavIcon = view.findViewById<ImageView>(R.id.add_light_icon)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater
.from(parent.context)
.inflate(layoutId, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//Récupérer les informations des bgs
val currentBg = bgList[position]
//Récupérer le repository
val repo = BgRepository()
//Utiliser glide pour récupérer l'image à partir de son lien -> composant
Glide.with(context).load(Uri.parse(currentBg.image_url)).into(holder.bgImage)
//Mettre à jour le nom du jeu
holder.bgName?.text = currentBg.name
//Mettre à jour le nom de l'éditeur du jeu
holder.bgEditor?.text = currentBg.editor
//Vérifier si le jeu a été ajouté ou non
if (currentBg.faved) {
holder.bgFavIcon.setImageResource(R.drawable.ic_check)
} else {
holder.bgFavIcon.setImageResource(R.drawable.ic_add_light)
}
//Rajouter une interaction sur icône checkbox
holder.bgFavIcon.setOnClickListener {
//Inverse si le bouton est en mode "ajouté" ou non
currentBg.faved = !currentBg.faved
//Mettre à jour l'objet jeu
repo.updateBg(currentBg)
}
//Interaction lors du clic sur un jeu
holder.itemView.setOnClickListener {
//Afficher la popup
BgInfoPopup(this, currentBg).show()
}
}
override fun getItemCount(): Int = bgList.size
}
致命的例外是详细说明这一部分:
if (currentBg.faved) {
holder.bgFavIcon.setImageResource(R.drawable.ic_check)
} else {
holder.bgFavIcon.setImageResource(R.drawable.ic_add_light)
}
如果你对一个真正需要帮助的缺乏经验的学生有任何想法,请回答!:)
预先谢谢你
发布于 2022-06-07 03:12:08
我认为您可能需要检查传递给BgAdapter的BgAdapter,以确定是否包括R.id.add_light_icon。
发布于 2022-06-07 04:33:04
您必须检查布局中的R.id.add_light_icon
。如果您的代码中没有任何错误,您可能是在膨胀错误的布局,获得空视图可能在您的布局中没有视图,或者传递错误的id。
https://stackoverflow.com/questions/72524443
复制相似问题