如何修复“AndroidRuntime: FATAL EXCEPTION: main, kotlin.KotlinNullPointerException“?尝试删除存储的数据 Sqlite 数据库时出错

How to fix "AndroidRuntime: FATAL EXCEPTION: main, kotlin.KotlinNullPointerException"? error when trying to delete the stored data Sqlite db

提问人:Gopalkrishna 提问时间:3/23/2019 最后编辑:MBTGopalkrishna 更新时间:12/8/2019 访问量:104

问:

我正在尝试开发一个 Notes 应用程序,可以在其中保存笔记列表。这些笔记将保存在SQLite数据库中。我设置了一个按钮来删除创建的笔记。当我在运行时单击此对接(没有完整时间错误)时,它给了我一个提到的错误。请帮助解决此问题。

我试图通过读取和复制代码来开发这个应用程序

https://github.com/hussien89aa/KotlinUdemy/tree/master/Android/NoteApp/StartUp

inner class MyNotesAdapter : BaseAdapter {

    var listNotesAdapter = ArrayList<note>()
    var context: Context? = null

    constructor(listNotesAdapter: ArrayList<note>) : super() {
        this.listNotesAdapter = listNotesAdapter
        this.context = context
    }


    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        var myView = layoutInflater.inflate(R.layout.ticket, null)
        var myNote = listNotesAdapter[position]
        myView.tvTitle.text = myNote.nodeName
        myView.tvDes.text = myNote.nodeDes


        myView.delete.setOnClickListener(View.OnClickListener {

            var dbManager = DbManager(this.context!!) //This is the line where I am getting error.

            val selectionArgs = arrayOf(myNote.nodeID.toString())
            dbManager.Delete("ID=?", selectionArgs)
            LoadQuery("%")
        })
Android SQLITE kotlin nullpointerexception

评论

0赞 Ilya 3/24/2019
@EpicPandaForce请您重新打开这个问题,因为链接的答案中关于 Java 中 NullPointerException 的答案与 Kotlin 及其在运算符遇到值时发生的 KotlinNullPointerException 没有太大关系。解释为什么在这里是 null 也很好。!!nullcontext

答:

0赞 Ilya 12/8/2019 #1

由于该行中的表达式中的 null 断言失败,您得到一个 here: operator 确保左侧的表达式不是 null 或抛出否则。KotlinNullPointerExceptioncontext!!!!KNPE

here 变量在 中被访问时为 null。为什么它是空的?我想是因为在此代码示例中,它从未分配给 null 以外的其他内容。特别是,代码的以下部分看起来很可疑:contextOnClickListener

inner class MyNotesAdapter : BaseAdapter {
    ...
    var context: Context? = null

    constructor(listNotesAdapter: ArrayList<note>) : super() {
        ...
        this.context = context
    }

在这里,您将 的值赋值给变量,但该值从何而来?具有此名称的最接近的标识符是相同的变量,该变量最初是 null,因此会再次分配此变量。contextcontextcontextnull

事实上,IDE甚至在这一行上报告了警告。Variable 'context' is assigned to itself