web-dev-qa-db-fra.com

Seuls les appels sûrs ou non nuls assertis sont autorisés sur un type de liste de destinataires annulable

Je viens de commencer à utiliser kotlin pour Android development.My arraylist est déclaré comme ceci-

var day1: ArrayList<DietPlanDetailModel>? = null

Maintenant j'essaye d'accéder à un élément par sa position

    val dietPlan= day1[position]

mais j'obtiens en dessous du temps de compilation error-

Seuls les appels sûrs ou non nuls assertis sont autorisés sur un type de liste de destinataires annulable

Pourquoi ai-je cette erreur et comment puis-je la résoudre?

7
Android Developer

Le problème est que vous avez défini le ArrayList comme nullable. Vous avez deux options ici:

1) ne définissez pas la variable nullable (cela dépend de votre code): var day1: ArrayList<DietPlanDetailModel> = ArrayList()

2) accédez à votre structure de données avec une vérification nulle: val dietPlan= day1?.get(position)

19
guenhter

Comme défini, day1 Peut être null mais vous invoquez une fonction en faisant [], Ce qui est fondamentalement la même chose que d'appeler day1.get(index).

Cela peut lancer un NullpointerException, que le compilateur Kotlin essaie de faire prévaloir. Ainsi, seuls les appels sécurisés comme celui-ci sont autorisés: day1?.get().

6
s1m0nw1

Vous avez dit au compilateur que votre variable peut être nulle (et lui être affectée nulle).

day1[position] Est essentiellement day1.get(position) qui plantera avec NPE si day1 Est null -> null.get(position)

Si vous pouvez garantir que day1 Sera initialisé, je vous recommande lateinit ou tout simplement d'affecter un nouvel Arraylist avec déclaration. Bien sûr, simple day1?.get(position) fonctionne très bien.

2
poss