不幸的是,该应用程序已停止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编写的第三方库时,可能会出现这种情况。