Android Developer
Android Developer

Reputation: 9643

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?

Upvotes: 28

Views: 58018

Answers (3)

guenhter
guenhter

Reputation: 12167

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)

Upvotes: 37

s1m0nw1
s1m0nw1

Reputation: 81859

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

Upvotes: 7

poss
poss

Reputation: 1789

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.

Upvotes: 2

Related Questions