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

Android Studio中用户注册数据无法插入Firebase数据库的问题求助

代码问题排查与修复方案

1. 核心逻辑错误(直接导致无数据写入)

1.1 表单校验逻辑完全写反

你在uploadData方法里的判断条件用错了逻辑运算符:
原代码:

if(TextUtils.isEmpty(name) || TextUtils.isEmpty(bio) || TextUtils.isEmpty(web) || TextUtils.isEmpty(prof) || TextUtils.isEmpty(mail) || imageUri != null)

这里用的是||(或),只要任意一个字段为空,或者选择了图片,就会进入上传逻辑,完全不符合预期。你需要的是所有字段都不为空,且已经选择了图片才执行上传,应该改成:

if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(bio) && !TextUtils.isEmpty(web) && !TextUtils.isEmpty(prof) && !TextUtils.isEmpty(mail) && imageUri != null)

1.2 图片选择回调逻辑错误

onActivityResult里的判断同样用错了逻辑运算符,原代码用||(或)会导致只要满足一个条件就进入处理,很容易触发空指针:
原代码:

if (requestCode==PICK_IMAGE || resultCode== RESULT_OK || data != null || data.getData() !=null)

改成&&(且)保证所有条件都满足才处理图片:

if (requestCode==PICK_IMAGE && resultCode== RESULT_OK && data != null && data.getData() !=null)

2. 缺失异常捕获逻辑(无法定位失败原因)

你目前只给Firestore的写入加了成功回调,没有加失败回调,就算写入被安全规则拦截、网络异常,你也看不到报错,给两个写入操作都补全失败回调即可:

// 实时数据库写入加失败回调
databaseReference.child(currentUserId).setValue(member)
    .addOnFailureListener(e -> {
        progressBar.setVisibility(View.INVISIBLE);
        Toast.makeText(CreateProfile.this, "实时数据库写入失败:"+e.getMessage(), Toast.LENGTH_SHORT).show();
    });

// Firestore写入补全失败回调
documentReference.set(profile)
    .addOnSuccessListener(unused -> {
        // 原有成功逻辑保持不变
    })
    .addOnFailureListener(e -> {
        progressBar.setVisibility(View.INVISIBLE);
        Toast.makeText(CreateProfile.this, "Firestore写入失败:"+e.getMessage(), Toast.LENGTH_SHORT).show();
    });

3. 额外排查点

  • 调用user.getUid()前先判断user是否为null,避免未登录状态下空指针崩溃
  • 确认Firebase控制台已经同时启用了实时数据库和Firestore服务,且安全规则放开了认证用户的写入权限
  • 确认项目里的google-services.json是从当前使用的Firebase项目下载,包名完全匹配
  • 测试时保证设备网络正常,可正常访问Firebase服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:04