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

Firebase Auth注册后用户额外数据无法上传至Realtime Database求助

问题原因及解决方法

1. 异步写入操作被中断

setValue()是异步操作,你在调用写入方法后直接执行finish()关闭当前Activity,会导致未完成的写入请求被系统中断,无法成功上传数据。
解决方法:给setValue()添加完成监听器,等写入操作执行结束后再关闭页面,修改后的代码参考:

public void tryRegister(View view){
    authService.createUserWithEmailAndPassword
            (this.email.getText().toString(),this.password.getText().toString())
            .addOnCompleteListener(this, task -> {
                if (task.isSuccessful()){
                    String uid = authService.getCurrentUser().getUid();
                    Map<String, String> userDetails = new HashMap<String, String>();
                    userDetails.put("username", this.username.getText().toString());
                    DatabaseReference usersInfo = database.getReference("usersInfo");
                    // 给写入操作添加监听器
                    usersInfo.child(uid).setValue(userDetails)
                        .addOnSuccessListener(aVoid -> {
                            // 写入成功后再关闭页面
                            setResult(RESULT_OK);
                            finish();
                        })
                        .addOnFailureListener(e -> {
                            // 写入失败可以打印日志排查问题
                            this.failedReg.setText("用户信息保存失败:"+e.getMessage());
                            setResult(RESULT_CANCELED);
                            finish();
                        });
                }
                else{
                    this.failedReg.setText("error in the registration process");
                }
            });
}

2. 数据库安全规则配置错误

Firebase Realtime Database默认的安全规则会拦截未授权的写入请求,如果你没有调整过规则配置,就会出现写入无响应的情况。
你需要进入Firebase控制台的Realtime Database页面,切换到「规则」标签,配置usersInfo节点的写入权限,示例规则如下(仅允许用户读写自己uid对应的节点数据):

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

3. 依赖冗余问题

你的应用级依赖中重复声明了两次com.google.firebase:firebase-bom,虽然不会直接导致写入失败,但建议删除重复的bom声明,避免出现版本兼容问题。

4. 数据库实例连接问题

如果你使用的是非默认区域的Realtime Database实例,需要在初始化数据库实例时传入对应数据库的URL,否则会连接到错误的实例导致写入失败,初始化示例:

FirebaseDatabase database = FirebaseDatabase.getInstance("你的数据库URL");

内容的提问来源于stack exchange,提问作者guy fayzak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:21:00