不幸的是,该应用程序已停止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 } } } 

属性adapter应该使用后期初始化的属性或可为空的属性。 否则,你会得到由NPE爱好者操作员的KotlinNullPointerException !! , 例如:

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

应该是一个后期初始化的财产:

 lateinit var adpter:foodAdapter 

可空房:

 var adapter:foodAdapter? = null 

为了扩展holi-java答案,与Java不同的Kotlin试图成为一个无效安全的语言 。

除非明确定义,否则Kotlin中的所有变量均不可空。 因此,如果你想有一个可以容纳一个null值的变量,你将需要添加? 在类型名称之后指出是这种情况。

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

在你的例子中,你迫使编译器将null值接受到导致运行时NPE的adapter变量中。

!! 只有在确定该值null但编译器无法做出区分的情况下才应该使用语法。 使用用Java编写的第三方库时,可能会出现这种情况。