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

Firebase注册时第二个addOnCompleteListener未触发,用户已存入数据库

问题分析与解决方案

问题现象

  • 通过Firebase Auth成功创建用户账号
  • 用户数据已成功写入Firebase Realtime Database
  • setValue()对应的addOnCompleteListener代码块完全未执行
  • 无任何报错信息

核心原因

从你提供的代码来看,最可能的问题是Lambda表达式的语法错误:你把Lambda参数的箭头符号->写成了-,导致系统无法正确识别监听器逻辑,自然不会执行对应的代码块。

另外,代码最后一行的progressBar.visibility = View.GONE写在异步操作外部,会在发起请求后立即执行,无法实现“等待操作完成再隐藏进度条”的预期效果。

修正后的代码

mAuth?.createUserWithEmailAndPassword(email, password)
    ?.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val currentUser = FirebaseAuth.getInstance().currentUser ?: run {
                showToast("获取用户信息失败")
                progressBar.visibility = View.GONE
                return@addOnCompleteListener
            }
            val user = User(fullName, age, email)
            FirebaseDatabase.getInstance().getReference("user")
                .child(currentUser.uid)
                .setValue(user)
                .addOnCompleteListener { childTask ->
                    if (childTask.isSuccessful) {
                        findNavController().navigate(R.id.action_registrationWindow_to_loginWindow)
                        showToast("用户注册成功")
                    } else {
                        showToast("注册失败,请重试!")
                    }
                    progressBar.visibility = View.GONE
                }
        } else {
            showToast("注册失败,请重试!")
            progressBar.visibility = View.GONE
        }
    }

关键修正点

  1. 修正Lambda箭头符号:将task -改为task ->,childTask -改为childTask ->,确保监听器能被正确注册和触发。
  2. 优化用户获取逻辑:增加空安全判断,避免currentUser!!的空指针风险。
  3. 统一进度条隐藏时机:将progressBar.visibility = View.GONE移到所有异步操作的完成回调中,确保只有操作结束后才隐藏进度条。

额外建议

  • 可以添加addOnFailureListener来捕获数据库操作的异常,方便排查潜在问题:
    .setValue(user)
    .addOnFailureListener { e ->
        Log.e("Registration", "写入数据库失败", e)
        showToast("写入数据失败:${e.message}")
    }
    

内容的提问来源于stack exchange,提问作者Uladzislau Krukouski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:15:43