获取Kotlin.Unit返回,新情况

问题描述 投票:0回答:1

这个问题与 kotlin 中的 android 应用程序开发有关。所以,问题是我想更新我的应用程序上的用户名(使用 Firebase)并保存它,以便更新的用户名显示在个人资料活动中。当我单击“编辑个人资料”时,会出现一个编辑文本,其中填充了当前用户名,用户可以对其进行修改,单击“保存”并进行更改。当我尝试保存编辑后的用户名时,问题出现了,它显示 Kotlin.Unit 而不是新用户名。我在函数下面添加了 return 语句,但它仍然显示下面的 kotlin.unit.code

class EditProfile : AppCompatActivity() {
    lateinit var binding: ActivityEditProfileBinding
    lateinit var bindingProfileActivity: ActivityProfileBinding
    lateinit var userProfileModel: UserModel
    lateinit var currentUserId: String
    lateinit var etUsername: String
    
    override fun onCreate(savedInstanceState: Bundle?) {
        binding = ActivityEditProfileBinding.inflate(layoutInflater)
        bindingProfileActivity = ActivityProfileBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(binding.root)

        //firebaseAuth
        currentUserId = FirebaseAuth.getInstance().currentUser?.uid!!
        //get the username from the database
        Firebase.firestore.collection("users")
            .document(currentUserId)
            .get()
            .addOnSuccessListener { it ->
                userProfileModel = it.toObject(UserModel::class.java)!!

                //bind the username from the model to the EditText
                val usernameFinal = userProfileModel.username
                etUsername = binding.usernameField.setText(usernameFinal).toString()

            }
        //save the username when the user clicks on save
        binding.savePfpButton.setOnClickListener {
            saveUsername()

        }//end oncreate fun

        //update username method
        private fun saveUsername(): String {
            val updatedName: String = etUsername
            val updatedProf = mapOf(
                "username" to updatedName
            )
            //save the map in the document
            Firebase.firestore.collection("users").document(currentUserId).update(updatedProf)
            UiUtil.showToast(applicationContext, "Username updated")
            return updatedName

        }
    }
}

android firebase kotlin firebase-authentication
1个回答
0
投票

当我尝试保存编辑后的用户名时,问题出现了,它显示 Kotlin.Unit 而不是新用户名。

由于声明了

Kotlin.Unit
变量,您将获得
etUsername
而不是新用户名:

lateinit var etUsername: String

数据的分配:

etUsername = binding.usernameField.setText(usernameFinal).toString()

以及

saveUsername()
函数的调用,您可以在其中使用:

val updatedName: String = etUsername

所以你现在正在做的,是通过分配

TextView#setText()
返回的值来初始化 etUsername,然后将其转换为
String
。由于此方法返回 Unit 类型的对象,因此
etUsername
字段将仅保存该对象的字符串表示形式,即“Unit”字符串。

如果你想将

usernameField
的更新值赋给
usernameFinal
TextView,那么你只需要使用下面这行代码:

binding.usernameField.setText(usernameFinal)

它采用您从 Firestore 读取的

usernameFinal
值并将其设置为
TextView
字段。因此,您的活动中不需要额外的字段,例如
etUsername

© www.soinside.com 2019 - 2024. All rights reserved.