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
相关产品推荐
相关产品推荐

