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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:50:36