Just started using kotlin for android development.My arraylist is declared like this-
var day1: ArrayList<DietPlanDetailModel>? = null
Now I am trying to access an element by its position
val dietPlan= day1[position]
but i am getting below compile time error-
Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist
Why am i getting this error and how can i resolve it?
As defined,
day1
can benull
but you're invoking a function by doing[]
, which is basically the same as callingday1.get(index)
.This can throw a
NullpointerException
, which the Kotlin compiler tries to prevend. Thus, only safe calls like this are allowed:day1?.get()
.You told compiler that your variable can be null (and assigned null to it).
day1[position]
is essentiallyday1.get(position)
which will crash with NPE ifday1
isnull
->null.get(position)
If you can guarantee that
day1
will be initialized id recommendlateinit
or just straight up assigning new Arraylist with declaration. Of course, simpleday1?.get(position)
works fine.The problem is, that you defined the
ArrayList
asnullable
. You have two options here:1) don't define the variable
nullable
(this depends on your code):var day1: ArrayList<DietPlanDetailModel> = ArrayList()
2) access your data-structure with a null check:
val dietPlan= day1?.get(position)