I'm building a boardgame manager app using kotlin for a school project, and I'm new at using Kotlin and Android Studio. I've decided to adapt an online tutorial to my needs so I can build my own app. But this error appears when I launch the app and I don't understand why :
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
I've tried to launch it in debug mode so I may find the problem but I don't understand why it is mentionned that it can be null.
I use a realtime firebase database, and here is the code of my BgAdapter, where the FATAL EXCEPTION appears :
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
}
The FATAL EXCEPTION is targetting specificaly this part :
if (currentBg.faved) {
holder.bgFavIcon.setImageResource(R.drawable.ic_check)
} else {
holder.bgFavIcon.setImageResource(R.drawable.ic_add_light)
}
If you have any idea for an unexperienced student who really needs help, feel free to answer ! :)
Thank you by advance