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