web-dev-qa-db-fra.com

java.lang.IllegalStateException: TextView ne doit pas être nul (Android / Kotlin)

J'ai la classe ViewHolder suivante pour ma vue Recycler,

inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        private val dateText = itemView.itemDateSummaryList
        private val systolicVal = itemView.systolicValue
        private val diastolicVal = itemView.diastolicValue

        fun update(listItem: SummaryListItemModel) {
            Log.i(TAG, "Update method called " + listItem.date)
            dateText.text = listItem.date
            systolicVal.text = listItem.sysVal.toInt().toString()
            diastolicVal.text = listItem.diasVal.toInt().toString()
        }

    }

Mais lorsque j'exécute l'application, une erreur apparaît au dateText.text = listItem.date en disant,

Java.lang.IllegalStateException: dateText must not be null
at *****.******.*****.ui.detailview.bloodpressure.SummaryListAdapter$ItemViewHolder.update(SummaryListAdapter.kt:68)

Mais le listItem.date n'est pas nul J'ai vérifié avec le journal.

12
kokilayaa

l'erreur ne concerne pas listItem.date, l'erreur indique que la vue de texte dateText dans laquelle vous essayez de définir du texte est nulle,

vérifiez que vous utilisez le bon textview

Possibilités:
1) vous utilisez peut-être un mauvais id de textview
2) vous avez peut-être utilisé un mauvais fichier lors du gonflage de la vue.

ctrl + cliquez sur itemDateSummaryList et voyez si le textview provient du même fichier de mise en page que vous avez infate ou autre

7
Irony Stack

Si vous utilisez des fragments: 1. Utilisez une variable globale qui contiendra votre référence de mise en page

private var root: View? = null   // create a global variable which will hold your layout 
 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            root = inflater.inflate(R.layout.your_layout_file_name, container, false)  // initialize it here
            return root
    }

2. Pour utiliser n'importe quelle vue de votre mise en page qui se trouve à l'intérieur de votre mise en page, vous pouvez l'utiliser avec (root.) comme:

root!!.textView.text="Hello"
5
Suraj Vaishnav

Cela signifie que votre vue dateText elle-même est nulle et non la valeur listItem.date Vérifiez si vous le rendez correctement, le itemview a le TextView avec l'ID auquel vous essayez d'accéder

4
rajan ks

Je reçois cette erreur mon fragment, j'ai résolu cette erreur,

Code d'erreur:

class MyFragment : Fragment(){

    private var item: Item? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        item = arguments?.getParcelable(BUNLDE_ITEM)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        item?.let {
            textViewTitle.text = "Text"
        }
        return inflater.inflate(R.layout.my_fragment, null, false)
    }

    companion object {
        private const val BUNLDE_ITEM = "item"
        fun newInstance(item: Item) = MyFragment().apply {
            arguments = Bundle().apply {
                putParcelable(BUNLDE_ITEM, item)
            }
        }
    }
}

Code de travail:

class MyFragment : Fragment() {

    private var item: Item? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        item = arguments?.getParcelable(BUNLDE_ITEM)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val root: View = inflater.inflate(R.layout.my_fragment, container, false)
        val textViewTitle = root.findViewById<View>(R.id.textViewTitle) as TextView

        item?.let {
            textViewTitle.text = "text"
        }
        return root
    }

    companion object {
        private const val BUNLDE_ITEM = "item"
        fun newInstance(item: Item) = MyFragment().apply {
            arguments = Bundle().apply {
                putParcelable(BUNLDE_ITEM, item)
            }
        }
    }
}
1

Je viens d'avoir le même problème avec mon RecyclerView. Cela fonctionnait depuis des mois. Après de nombreuses étapes de dépannage infructueuses, j'ai fait un projet Build> Clean et cela a résolu le problème.

0
Rich Gabrielli

Cela peut également se produire sur une référence de contexte incorrecte dans le fichier xml, généralement il apparaît lors du déplacement manuel de l'activité vers un autre package, Android studio n'a pas effectué cette modification automatiquement:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:tools="http://schemas.Android.com/tools"
        ....
        tools:context=".view.ui.login.LoginActivity">
....
</androidx.constraintlayout.widget.ConstraintLayout>
0
Vitaliy A

La même chose m'est arrivée lors de l'utilisation de Fragment, j'ai pris mon code de onCreateView et l'ai mis dans la méthode onViewCreated, le problème a été résolu.

0
SinaMN75