不幸的是,该应用程序已停止 Android 工作室并且没有错误
unfortunately the app has stopped Android studio and there is no Error
在 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
应该使用 late-initialized property or a nullable property. Otherwise, you will get a KotlinNullPointerException
by the NPE-lovers 运算符 !!
,例如:
// v---cast `null` to any type will throws NullPointerException
var adpter:foodAdapter=null!!
应该是 late-initialized 属性:
lateinit var adpter:foodAdapter
OR 可为空 属性:
var adapter:foodAdapter? = null
展开 answer, Kotlin unlike Java tries to be a null safe language。
除非明确定义,否则 Kotlin 中的所有变量都不可为 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。
只有当您确定值 不会 但编译器无法做出这种区分时,才应使用 !!
语法.使用以 Java.
编写的第 3 方库时可能会出现这种情况
在 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
应该使用 late-initialized property or a nullable property. Otherwise, you will get a KotlinNullPointerException
by the NPE-lovers 运算符 !!
,例如:
// v---cast `null` to any type will throws NullPointerException
var adpter:foodAdapter=null!!
应该是 late-initialized 属性:
lateinit var adpter:foodAdapter
OR 可为空 属性:
var adapter:foodAdapter? = null
展开
除非明确定义,否则 Kotlin 中的所有变量都不可为 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。
只有当您确定值 不会 但编译器无法做出这种区分时,才应使用 !!
语法.使用以 Java.