提问人:Gopalkrishna 提问时间:3/23/2019 最后编辑:MBTGopalkrishna 更新时间:12/8/2019 访问量:104
如何修复“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
问:
我正在尝试开发一个 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赞
Ilya
12/8/2019
#1
由于该行中的表达式中的 null 断言失败,您得到一个 here: operator 确保左侧的表达式不是 null 或抛出否则。KotlinNullPointerException
context!!
!!
KNPE
here 变量在 中被访问时为 null。为什么它是空的?我想是因为在此代码示例中,它从未分配给 null 以外的其他内容。特别是,代码的以下部分看起来很可疑:context
OnClickListener
inner class MyNotesAdapter : BaseAdapter {
...
var context: Context? = null
constructor(listNotesAdapter: ArrayList<note>) : super() {
...
this.context = context
}
在这里,您将 的值赋值给变量,但该值从何而来?具有此名称的最接近的标识符是相同的变量,该变量最初是 null,因此会再次分配此变量。context
context
context
null
事实上,IDE甚至在这一行上报告了警告。Variable 'context' is assigned to itself
评论
!!
null
context