我有一个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{
}
}
}
名字和姓氏在另一个文件中声明,如下所示:
class Hero(val id: String?, val firstname: String, val lastname: String)
当我运行该应用程序并导航至该片段时,该应用程序崩溃并显示以下错误:
最佳答案
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)
)。