我正在尝试开发一个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("%")
})
答案 0 :(得分:0)
由于在该行中的表达式KotlinNullPointerException
中的null声明失败,您在这里得到context!!
:!!
运算符确保左侧的表达式不为null或抛出KNPE
否则。
在context
中访问OnClickListener
变量时,该变量为null。为什么它为空?我想是因为在此代码示例中,从未将其分配给null以外的其他东西。特别是,以下代码部分看起来可疑:
inner class MyNotesAdapter : BaseAdapter {
...
var context: Context? = null
constructor(listNotesAdapter: ArrayList<note>) : super() {
...
this.context = context
}
您在此处将context
的值分配给context
变量,但是该值从何而来?与该名称最接近的标识符是相同的context
变量,最初为空,因此该变量将再次分配null
。
实际上,IDE甚至在此行报告Variable 'context' is assigned to itself
警告。