首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的setImageResource上有一个致命的例外,我不明白为什么

我的setImageResource上有一个致命的例外,我不明白为什么
EN

Stack Overflow用户
提问于 2022-06-06 23:34:35
回答 2查看 46关注 0票数 0

我正在为一个学校项目开发一个使用kotlin的棋盘游戏管理应用程序,我也是使用Kotlin和Android Studio的新手。我决定让在线教程适应我的需求,这样我就可以构建自己的应用程序了。但是,当我启动应用程序时,这个错误就会出现,我不明白为什么:

代码语言:javascript
运行
复制
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference

我尝试在调试模式下启动它,这样我可能会发现问题,但我不明白为什么会提到它可以是空的。

我使用一个实时的防火墙数据库,下面是我的BgAdapter的代码,其中出现了致命的异常:

代码语言:javascript
运行
复制
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

}

致命的例外是详细说明这一部分:

代码语言:javascript
运行
复制
        if (currentBg.faved) {
        holder.bgFavIcon.setImageResource(R.drawable.ic_check)
    } else {
        holder.bgFavIcon.setImageResource(R.drawable.ic_add_light)
    }

如果你对一个真正需要帮助的缺乏经验的学生有任何想法,请回答!:)

预先谢谢你

EN

回答 2

Stack Overflow用户

发布于 2022-06-07 03:12:08

我认为您可能需要检查传递给BgAdapter的BgAdapter,以确定是否包括R.id.add_light_icon。

票数 0
EN

Stack Overflow用户

发布于 2022-06-07 04:33:04

您必须检查布局中的R.id.add_light_icon。如果您的代码中没有任何错误,您可能是在膨胀错误的布局,获得空视图可能在您的布局中没有视图,或者传递错误的id。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72524443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档