我有一个 Android Kotlin 应用程序 fragment ,在资源布局中包含三个元素:
<EditText android:id="@+id/forename_input_account"/>
<EditText android:id="@+id/surname_input_account"/>
<Button android:id="@+id/saveButton"/>
点击保存后,我需要将两个 EditText 字段的内容写入项目 Firebase Realtime DB。
在帐户 fragment 文件中,我有以下内容:
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{
}
}
}
名字和姓氏在单独的文件中声明如下:
class Hero(val id: String?, val firstname: String, val lastname: String)
当我运行应用程序并导航到 fragment 时,应用程序崩溃并出现以下错误:
kotlin.UninitializedPropertyAccessException: lateinit property forename_input_account has not been initialized
最佳答案
forename_input_account = forename_input_account
将 forename_input_account
设置为自身。这没有任何实际效果,并且由于您在为 lateinit var
赋值之前尝试访问它,所以您会崩溃。
如果您尝试使用 Kotlin synthetic properties ,删除三个 lateinit var
属性,只使用 Kotlin 合成属性,范围内引用膨胀的 view
。
否则,您需要使用 findViewById()
或其他方法让 View
分配给那些 lateinit var
属性(例如,forename_input_account = view.findViewById(R.id.forename_input_account)
).
关于android - Kotlin lateInit has not been initialized 错误崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346306/