android - Kotlin lateInit has not been initialized 错误崩溃应用程序

标签 android firebase firebase-realtime-database kotlin

我有一个 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_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)).

关于android - Kotlin lateInit has not been initialized 错误崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346306/

相关文章:

swift - 如何使用 Swift 获取 Firebase 中一个子项的所有数据

java - 如何在 Android 中创建 "fill-up"动画

c# - Unity如何序列化和反序列化复杂的嵌套json?

android - 为 AlarmManager 警报创建 Wi-Fi 唤醒锁

Firebase 在同一页面上实现 google 和 facebook 登录

javascript - React 中的 Firebase 查询 - 我可以登录到控制台,但不能在组件中使用

swift - Firebase 获取特定父项而不是所有子项 SWIFT

android - Koin DI Android 单元测试 ViewModel

firebase - 在 Firebase 身份验证中, 'recently' 经过身份验证意味着多久前?

firebase - 如何只允许 “owns”数据的用户编辑呢?火力基地