Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist

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?

like image 267
Android Developer Avatar asked Oct 30 '17 11:10

Android Developer


3 Answers

The problem is, that you defined the ArrayList as nullable. You have two options here:

  1. don't define the variable nullable (this depends on your code):
var day1: ArrayList<DietPlanDetailModel> = ArrayList()
  1. access your data-structure with a null check:
val dietPlan= day1?.get(position)
like image 140
guenhter Avatar answered Oct 16 '22 18:10

guenhter


As defined, day1 can be null but you're invoking a function by doing [], which is basically the same as calling day1.get(index).

This can throw a NullpointerException, which the Kotlin compiler tries to prevend. Thus, only safe calls like this are allowed: day1?.get().

like image 29
s1m0nw1 Avatar answered Oct 16 '22 18:10

s1m0nw1


You told compiler that your variable can be null (and assigned null to it).

day1[position] is essentially day1.get(position) which will crash with NPE if day1 is null -> null.get(position)

If you can guarantee that day1 will be initialized id recommend lateinit or just straight up assigning new Arraylist with declaration. Of course, simple day1?.get(position) works fine.

like image 42
poss Avatar answered Oct 16 '22 19:10

poss