android - Kotlin lateInit 尚未初始化错误崩溃应用程序
问题描述
我有一个 Android Kotlin 应用程序片段,在资源布局中包含三个元素:
<EditText android:id="@+id/forename_input_account"/>
<EditText android:id="@+id/surname_input_account"/>
<Button android:id="@+id/saveButton"/>
单击保存时,我需要将两个 EditText 字段的内容写入项目 Firebase Realtime DB。
在帐户片段文件中,我有以下内容:
class AccountFragment : Fragment() {
lateinit var forename_input_account: EditText
lateinit var surname_input_account: EditText
lateinit var saveButton: Button
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
forename_input_account = forename_input_account
surname_input_account = surname_input_account
saveButton = saveButton
saveButton.setOnClickListener {
saveAccount()
}
}
private fun saveAccount(){
val firstname = forename_input_account.text.toString().trim()
val lastname = lastname_input_account.text.toString().trim()
val ref = FirebaseDatabase.getInstance().getReference("mySaveLocation")
val saveId = ref.push().key
val myRecord = save(saveId, firstname, lastname)
ref.child(saveId.toString()).setValue(myRecord).addOnCompleteListener{
}
}
}
firstname 和 lastname 在单独的文件中声明如下:
class Hero(val id: String?, val firstname: String, val lastname: String)
当我运行应用程序并导航到片段时,应用程序崩溃并出现以下错误:
kotlin.UninitializedPropertyAccessException:lateinit 属性 forename_input_account 尚未初始化
解决方案
forename_input_account = forename_input_account
设置forename_input_account
为自己。这没有实际效果,并且由于您lateinit var
在为其分配值之前尝试访问它,因此您会崩溃。
如果您尝试使用Kotlin 合成属性,请删除这三个lateinit var
属性并只使用 Kotlin 合成属性,范围是指膨胀的view
.
否则,您需要使用findViewById()
or 来获取View
分配给这些lateinit var
属性的东西(例如,forename_input_account = view.findViewById(R.id.forename_input_account)
)。
推荐阅读
- mysql - 环回:如何确保将值发送到本地数据库,而不是远程数据库?
- java - 从右到左阅读语言的 Java 消息属性选择
- android - java.lang.NoClassDefFoundError Firebase 和 Unity
- python - Python StaleElementReferenceException:消息:过时的元素引用:元素未附加到页面文档
- pointers - 为什么 Rust 认为泄漏内存是安全的?
- python - 如何在 keras 中操作可训练的张量乘法运算?
- rgraph - 如何解决 RGraph 饼图中的标签冲突问题?
- javascript - React:如何关闭从父组件打开的子模式
- python - 是否可以在按下按钮时从谷歌表格运行 python 脚本?
- c# - Fluent Assertions Should().BeEquivalentTo 只有私有字段