к сожалению, приложение остановило студию Android, и нет ошибки

введите описание изображения здесь

В мониторе Android он делает эту ошибку, как на картинке, и я не могу понять, почему ошибка в XML? код без проблем с ним может изображение, которое я добавил, делает эту ошибку?

class MainActivity : AppCompatActivity() { val ListOffood = ArrayList<Food>() var adpter:foodAdapter=null!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ListOffood.add(Food("sandwis","m3 t7eneh",R.drawable.ic_stat_name)) ListOffood.add(Food("sandwis","m3 t7eneh",R.drawable.ic_stat_name)) ListOffood.add(Food("sandwis","m3 t7eneh",R.drawable.ic_stat_name)) ListOffood.add(Food("sandwis","m3 t7eneh",R.drawable.ic_stat_name)) ListOffood.add(Food("sandwis","m3 t7eneh",R.drawable.ic_stat_name)) adpter=foodAdapter(this,ListOffood) graidV.adapter=adpter } class foodAdapter: BaseAdapter { var ListOffood=ArrayList<Food>() var context: Context?=null constructor(context: Context, ListOffood:ArrayList<Food>):super(){ this.context=context this.ListOffood=ListOffood } override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View? { val food = ListOffood[p0] var view = LayoutInflater.from(context).inflate(R.layout.foodlist,p2,false) view.textV.text=food.name view.imageV.setImageResource(food.image!!) return view } override fun getItem(p0: Int): Any { return ListOffood[p0] } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return ListOffood.size } } } 

Атрибут свойства должен использовать свойство с завершенной инициализацией или свойство nullable. В противном случае вы получите KotlinNullPointerException от оператора NPE-любителей !! , например:

 // v---cast `null` to any type will throws NullPointerException var adpter:foodAdapter=null!! 

Должно быть свойство с поздним инициализацией :

 lateinit var adpter:foodAdapter 

ИЛИ свойство nullable:

 var adapter:foodAdapter? = null 

Чтобы расширить ответ на holi-java , Kotlin в отличие от Java пытается быть нулевым безопасным языком .

Если явно не определены все переменные в Котлине, они не имеют значения NULL. Поэтому, если вы хотите иметь переменную, которая может содержать null значение, вам нужно будет добавить ? после названия типа, чтобы указать, что это так.

 var canBeNull: String? = null var canNotBeNull: String = null // Won't compile var canNotBeNull2: String = null!! // Will crash and burn at runtime 

В вашем примере вы вынуждали компилятор принять null значение в переменную adapter которая привела к NPE времени выполнения.

!! синтаксис должен использоваться только тогда, когда вы уверены, что значение не будет равно null но компилятор не сможет выполнить это различие. Это может иметь место при использовании сторонних библиотек, написанных на Java.