web-dev-qa-db-fra.com

Le paramètre spécifié comme non nul est nul: méthode kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, paramètre convertView

J'ai eu cette erreur juste après avoir converti le code de l'adaptateur en Kotlin:

Java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter convertView
    at ...MyAdapter.getView(Unknown Source:35)
    at Android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.Java:220)
    at Android.widget.AbsListView.obtainView(AbsListView.Java:2366)

L'erreur se déclenche lors du gonflage de la ligne:

class LegalAdapter internal constructor(private val activity: Activity, private val list: ArrayList<Item>) : BaseAdapter() {

    override fun getView(position: Int, convertView: View, parent: ViewGroup): View {

    val layoutInflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater

    @SuppressLint("ViewHolder")
    val row = layoutInflater.inflate(R.layout.legal_list_item, parent, false) //exception is throw here

Apparemment, certains paramètres qui ne devraient pas être nuls sont nuls, et kotlin le vérifie. Le problème est que je ne peux même pas déboguer le nouveau code kotlin.

9
MiguelSlv

La méthode getView() fait partie de l'interface Adapter et est définie en Java. Documentation ici . La partie importante est cette note sur le paramètre convertView:

Vue : l'ancienne vue à réutiliser, si possible. Remarque: vous devez vérifier que cette vue n'est pas nulle et d'un type approprié avant de l'utiliser.

Cela signifie qu'il est tout à fait valide pour le framework de passer null valeurs pour convertView à cette méthode (ce qui signifie que vous devez créer une nouvelle vue et la renvoyer, plutôt que de recycler une ancienne vue).

En retour, cela signifie que la définition Kotlin de convertView doit être de type View?, pas seulement View. Modifiez donc la signature de votre fonction en ceci:

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View
11
Ben P.

Rendre convertView nullable:

convertView: View?

Je ne sais pas pourquoi le numéro de ligne est incorrect, mais le stacktrace vous indique où chercher dans le message d'erreur.

6
TheWanderer

Modifiez votre convertView dans getView de non nul à nullable

override fun getView(position: Int, convertView: View, parent: ViewGroup): View {

à

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
0
Lai Lee