Android Studio中Firebase注册用户后如何存入实时数据库?
解决Firebase注册成功但用户数据无法写入实时数据库的问题
你的代码已经完成了Firebase Auth的账号创建逻辑,但缺少将用户信息写入Realtime Database的核心代码,以下是具体修复方案:
步骤1:添加数据库写入逻辑到注册成功回调
首先在类中声明数据库引用对象,并在初始化时关联到Firebase Realtime Database的指定节点(比如Users),然后在账号创建成功的回调中,把用户的姓名、邮箱等数据写入数据库。
修改后的核心代码块
先在类成员变量中新增:
DatabaseReference databaseReference;
然后在onCreate方法中初始化:
databaseReference = FirebaseDatabase.getInstance().getReference("Users");
最后修改createUserWithEmailAndPassword的成功回调:
fAuth.createUserWithEmailAndPassword(Email,Password).addOnSuccessListener(new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // 获取刚注册成功的用户唯一ID String userId = fAuth.getCurrentUser().getUid(); // 用HashMap存储用户数据(也可以自定义User实体类) HashMap<String, String> userData = new HashMap<>(); userData.put("fullName", FullName); userData.put("email", Email); // 将数据写入数据库,路径为Users/用户ID databaseReference.child(userId).setValue(userData) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void unused) { Toast.makeText(Register.this, "账号创建成功,数据已保存", Toast.LENGTH_SHORT).show(); startActivity(new Intent(getApplicationContext(),MainActivity.class)); finish(); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(Register.this, "数据保存失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } }); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(Register.this,e.getMessage(),Toast.LENGTH_SHORT).show(); } });
步骤2:确认数据库权限配置
默认情况下Firebase Realtime Database的规则是仅认证用户可读写,如果你在测试阶段可以临时使用宽松规则(上线后务必修改为严格权限):
{ "rules": { ".read": "auth != null", ".write": "auth != null" } }
完整修改后的Register类代码
package com.example.sampleapp; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.HashMap; public class Register extends AppCompatActivity { EditText regFullName, regEmail, regPass, confPass; Button regBtn, gotoLogin; FirebaseAuth fAuth; DatabaseReference databaseReference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); regFullName = findViewById(R.id.regFullName); regEmail = findViewById(R.id.regEmail); regPass = findViewById(R.id.regPass); confPass = findViewById(R.id.confPass); regBtn = findViewById(R.id.regBtn); gotoLogin = findViewById(R.id.gotoLogin); fAuth = FirebaseAuth.getInstance(); databaseReference = FirebaseDatabase.getInstance().getReference("Users"); // 返回登录页 gotoLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(getApplicationContext(),Login.class)); finish(); } }); // 注册按钮逻辑 regBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String FullName = regFullName.getText().toString(); String Email = regEmail.getText().toString(); String Password = regPass.getText().toString(); String ConfirmPass = confPass.getText().toString(); if (FullName.isEmpty()){ regFullName.setError("请输入全名"); return; } if (Email.isEmpty()){ regEmail.setError("请输入邮箱"); return; } if (Password.isEmpty()){ regPass.setError("请输入密码"); return; } if (ConfirmPass.isEmpty()){ confPass.setError("请确认密码"); return; } if (!Password.equals(ConfirmPass)){ confPass.setError("两次输入的密码不一致"); return; } Toast.makeText(Register.this,"数据验证通过",Toast.LENGTH_SHORT).show(); fAuth.createUserWithEmailAndPassword(Email,Password).addOnSuccessListener(new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { String userId = fAuth.getCurrentUser().getUid(); HashMap<String, String> userData = new HashMap<>(); userData.put("fullName", FullName); userData.put("email", Email); databaseReference.child(userId).setValue(userData) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void unused) { Toast.makeText(Register.this, "账号创建成功,数据已保存", Toast.LENGTH_SHORT).show(); startActivity(new Intent(getApplicationContext(),MainActivity.class)); finish(); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(Register.this, "数据保存失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } }); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(Register.this,e.getMessage(),Toast.LENGTH_SHORT).show(); } }); } }); } }
常见排查点
- 确认Firebase控制台已创建Realtime Database实例
- 检查应用的
google-services.json文件是否为最新版本 - 查看Logcat中的错误日志,定位具体失败原因
内容的提问来源于stack exchange,提问作者Marc Jacob
相关产品推荐
相关产品推荐

