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

Firebase身份验证正常但Realtime Database写入数据失败问题咨询

问题代码
mAuth
  .createUserWithEmailAndPassword(Demail, Dpasvord)
  .addOnCompleteListener(new OnCompleteListener() {
    @Override public void onComplete(@NonNull Task task) {
      if (task.isSuccessful()) {
        User user = new User(Dname, Demail, Dpasvord);
        FirebaseDatabase.getInstance().getReference("Users").child(
          FirebaseAuth.getInstance().getCurrentUser().getUid()
        ).setValue(user).addOnCompleteListener(new OnCompleteListener() {
          @Override public void onComplete(@NonNull Task task) {
            if (task.isSuccessful()) {
              Toast.makeText(MainActivity2.this, "Uspjesno ste se registrovali!", Toast.LENGTH_LONG).show();
              progressBar.setVisibility(View.GONE);
解决方案
  • 先补充失败日志逻辑定位根因:当前代码只处理了写入成功的分支,没有捕获异常信息。在写入操作的onComplete方法中补充else分支,打印task.getException()的完整堆栈信息,可直接定位具体报错原因。示例补充代码:
    } else {
        Log.e("DB_WRITE_ERROR", "写入失败", task.getException());
        Toast.makeText(MainActivity2.this, "写入失败:" + task.getException().getMessage(), Toast.LENGTH_LONG).show();
    }
    
  • 检查User类的序列化合规性:Firebase实时数据库序列化Java类有强制要求,需满足三个条件:
    • 类包含公共的无参数构造方法(用于Firebase反射实例化对象)
    • 所有需要存储的字段要么是public修饰,要么有对应的public getter/setter方法
    • 不要混淆User类,需在proguard规则中添加该类的混淆豁免规则,避免字段名被篡改后无法匹配写入
  • 修正数据库实例初始化方式:如果你的Firebase实时数据库不是默认的us-central1区域,直接调用FirebaseDatabase.getInstance()会默认连接美国节点,导致写入失败,需要传入你数据库的完整URL初始化,格式如下:
    FirebaseDatabase.getInstance("你的实时数据库完整URL").getReference("Users")
    
  • 避免UID获取异常:刚完成注册的场景下,调用FirebaseAuth.getInstance().getCurrentUser()有小概率返回空值,建议直接从注册成功的返回结果中取UID,修改路径获取逻辑:
    // 替换原有getCurrentUser().getUid()的写法
    String uid = task.getResult().getUser().getUid();
    
  • 确认节点名称拼写:当前代码使用的节点名是首字母大写的Users,检查是否和你预期的节点名大小写完全一致,Firebase数据库路径对大小写敏感。

内容的提问来源于stack exchange,提问作者Selmir Muminovic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:48:00