我有一个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_accountforename_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))。

07-24 09:37
查看更多