如何修复“AndroidRuntime: FATAL EXCEPTION: main, kotlin.KotlinNullPointerException”?尝试删除存储的数据Sqlite db时出错
Posted
技术标签:
【中文标题】如何修复“AndroidRuntime: FATAL EXCEPTION: main, kotlin.KotlinNullPointerException”?尝试删除存储的数据Sqlite db时出错【英文标题】:How to fix "AndroidRuntime: FATAL EXCEPTION: main, kotlin.KotlinNullPointerException"? error when trying to delete the stored data Sqlite db 【发布时间】:2019-08-14 07:21:27 【问题描述】:我正在尝试开发一个笔记应用程序,我可以在其中保存笔记列表。这些注释将保存在 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("%")
)
【问题讨论】:
@EpicPandaForce 能否请您重新提出问题,因为来自链接的关于 Java 中 NullPointerException 的答案与 Kotlin 及其 KotlinNullPointerException 没有太大关系,当!!
运算符遇到 null
值时会发生这种情况。在这里解释一下为什么context
为空也很好。
【参考方案1】:
由于该行中的表达式 context!!
中的 null 断言失败,您在这里得到了 KotlinNullPointerException
:!!
运算符确保左侧的表达式不为 null 或抛出 KNPE
否则。
这里context
变量在OnClickListener
中被访问时为空。为什么它为空?我想是因为在此代码示例中它从未被分配给 null 以外的东西。特别是,以下代码部分看起来很可疑:
inner class MyNotesAdapter : BaseAdapter
...
var context: Context? = null
constructor(listNotesAdapter: ArrayList<note>) : super()
...
this.context = context
在这里您将context
的值分配给context
变量,但该值从何而来?与此名称最接近的标识符是相同的 context
变量,该变量最初为 null,因此该变量再次被分配 null
。
事实上,IDE 甚至会在这一行报告Variable 'context' is assigned to itself
警告。
【讨论】:
以上是关于如何修复“AndroidRuntime: FATAL EXCEPTION: main, kotlin.KotlinNullPointerException”?尝试删除存储的数据Sqlite db时出错的主要内容,如果未能解决你的问题,请参考以下文章