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

如何在Android Studio中使用Kotlin将用户注册表单所有字段保存至Firebase实时数据库

解决方案:将自定义用户字段存储到Firebase实时数据库

你已经搞定了账号注册的核心功能,现在只需要在用户创建成功后,把额外的自定义字段写入Firebase实时数据库就可以了。我帮你一步步修改代码:

1. 先修复现有代码里的小bug

在validateData()方法里,有两处错误提示的UI控件写错了,会导致用户混淆:

  • 当联系电话长度不够时,错误提示应该设置给numberET,而不是passwordET
  • 当CNIC长度不够时,错误提示应该设置给cnicET,而不是passwordET

修改后的对应代码片段:

} else if (number.length<11){
    binding.numberET.error = "Enter full 11 Digit Number"
} else if (cnic.length<13){
    binding.cnicET.error = "Enter full 13 Digit CNIC Number"
}

2. 添加Firebase实时数据库的初始化

首先在类里新增实时数据库的引用变量,然后在onCreate()方法里完成初始化:

class SignUpActivity : AppCompatActivity() {
    // ... 原有变量保持不变 ...
    // 实时数据库相关引用
    private lateinit var firebaseDatabase: FirebaseDatabase
    private lateinit var usersRef: DatabaseReference

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySignUpBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // ... 原有ActionBar、ProgressDialog、FirebaseAuth初始化逻辑保持不变 ...

        // 初始化实时数据库,"users"是数据库根节点名称,可根据需求自定义
        firebaseDatabase = FirebaseDatabase.getInstance()
        usersRef = firebaseDatabase.getReference("users")
    }

3. 创建用户数据模型类

建议创建一个数据类来规范用户信息,让代码更清晰易维护,可以在SignUpActivity类外部或者单独的文件中定义:

data class User(
    val name: String,
    val email: String,
    val cnic: String,
    val contactNumber: String,
    val plateNumber: String
)

4. 修改firebaseSignUp()方法,添加数据写入逻辑

在用户注册成功的回调里,获取用户唯一UID,然后把自定义字段数据写入实时数据库的对应路径:

private fun firebaseSignUp() {
    progressDialog.show()
    // 创建Firebase账号
    firebaseAuth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            progressDialog.dismiss()
            if (task.isSuccessful) {
                val firebaseUser = firebaseUser = firebaseAuth.currentUser!!
                val userEmail = firebaseUser.email
                Toast.makeText(this, "Account Created With Email $userEmail",Toast.LENGTH_SHORT).show()

                // --- 新增:将自定义字段写入实时数据库 ---
                val userId = firebaseUser.uid
                // 组装用户数据对象
                val user = User(name, userEmail!!, cnic, number, platenumber)
                // 写入到数据库的/users/{userId}路径下
                usersRef.child(userId).setValue(user)
                    .addOnSuccessListener {
                        Toast.makeText(this, "User profile saved successfully", Toast.LENGTH_SHORT).show()
                    }
                    .addOnFailureListener { e ->
                        Toast.makeText(this, "Failed to save profile: ${e.message}", Toast.LENGTH_SHORT).show()
                    }
                // --- 新增结束 ---

                // 跳转到个人资料页
                startActivity(Intent(this, ProfileActivity::class.java))
                finish()
            } else {
                Toast.makeText(this, "Signup failed: ${task.exception?.message}", Toast.LENGTH_SHORT).show()
            }
        }
        .addOnFailureListener{ e->
            progressDialog.dismiss()
            Toast.makeText(this, "Signup failed due to ${e.message}",Toast.LENGTH_SHORT).show()
        }
}

5. 配置Firebase实时数据库安全规则

最后记得去Firebase控制台的实时数据库页面,修改规则确保只有认证用户能读写自己的数据(避免公开读写的安全风险):

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

这样修改后,用户注册成功时,姓名、CNIC、联系电话、车牌号这些自定义字段就会自动存储到Firebase实时数据库的users/{用户UID}路径下了。

内容的提问来源于stack exchange,提问作者Zeeshan Liaqat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:47:33