You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin同一Activity中如何将showAuth函数的值传递给setup函数

问题根因
  • setup() 函数定义要求必须传入email和provider两个参数,但你在onCreate生命周期中调用时,用户还未完成注册操作,这两个值还未生成,因此会报参数缺失错误。
  • 你将按钮点击事件绑定逻辑和注册成功后的业务逻辑耦合在了一起,同时在showAuth()中重复调用setup()会导致按钮重复绑定点击监听,后续点击会触发多次重复注册请求。
  • 原有代码还存在笔误:inputEmail.text.text.oString()为错误写法,需要修正。
修复方案

1. 修改setup函数

移除setup的入参,setup的作用仅为在页面初始化时给注册按钮绑定点击事件,不需要提前接收email和provider参数,这两个值会在注册成功的回调中直接获取:

private fun setup(){
    iniciarSesionButton.setOnClickListener{
        if (inputEmail.text.isNotEmpty() && inputContraseña.text.isNotEmpty()){
            FirebaseAuth.getInstance().createUserWithEmailAndPassword(inputEmail.text.toString(), inputContraseña.text.toString()) 
            .addOnCompleteListener {
                if(it.isSuccessful){
                    // 注册成功后直接获取所需的两个值
                    val email = it.result?.user?.email ?: ""
                    val provider = ProviderType.Email
                    // 执行数据库写入逻辑
                    val db = FirebaseFirestore.getInstance()
                    db.collection("users").document(email).set(
                        hashMapOf("provider" to provider, "username" to inputUsername.text.toString())
                    )
                    // 传入两个值调用showAuth跳转
                    showAuth(email, provider)
                }
                else{
                    showError()
                }
            }
        }
    }
}

2. 修改showAuth函数

移除showAuth中对setup的调用,showAuth仅负责封装跳转逻辑即可,重复调用setup会导致按钮监听多次绑定:

private fun showAuth(email: String, provider: ProviderType){   
    val authIntent = Intent(this, AuthActivity::class.java).apply {
        putExtra("email",email)
        putExtra("provider",provider.name)
    }
    startActivity(authIntent)
}

3. 保留onCreate中的调用

原有onCreate里的setup()调用无需修改,现在已经是无参调用,不会再报参数缺失错误。

内容的提问来源于stack exchange,提问作者Juan Sanchez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 11:27:01