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?
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)
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()
.
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.