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

Android Studio中Firebase OnCompleteListener代码块未触发问题

解决Firestore OnCompleteListener未触发的问题

1. 补全失败分支的日志输出

你的代码仅处理了task.isSuccessful()为true的场景,完全忽略了请求失败的分支,导致即使请求出错也无法获取错误信息。修改代码,添加失败分支的日志打印:

docRef.get().addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        DocumentSnapshot document = task.getResult();
        if (document.exists()) {
            // 你的业务逻辑
        } else {
            Log.d("Firestore", "目标文档不存在");
        }
    } else {
        // 打印失败原因,这是排查问题的关键
        Log.e("Firestore", "获取数据失败", task.getException());
    }
});

2. 验证集合/文档路径是否完全匹配

从你提供的Firestore结构来看,集合名称为Date 2024-05-20格式,文档为Time 10:00格式。必须确保reservationObject.getDate()和getTime()返回的字符串与Firestore中的名称完全一致:

  • 检查日期格式:是否为YYYY-MM-DD?有没有多余空格、斜杠或其他符号?
  • 检查时间格式:是否包含冒号?有没有AM/PM后缀?Firestore中的文档名是否和代码生成的完全一致?
  • 可以先通过日志打印生成的路径,确认正确性:
    Log.d("FirestorePath", "集合:" + datePath + ",文档:" + timePath);
    

3. 修复Firebase依赖版本冲突

你的firebase-messaging版本15.0.2过于老旧,与使用的Firebase BOM 32.7.0严重不兼容,可能导致Firestore客户端初始化异常。修改依赖,移除messaging的具体版本,让BOM自动管理版本:

// 替换旧的messaging依赖
implementation("com.google.firebase:firebase-messaging")

同时确保所有Firebase组件都通过BOM管理版本,避免手动指定版本引发冲突。

4. 检查Firestore安全规则

如果你的Firestore安全规则是默认配置(仅允许认证用户访问),但App中未完成用户登录,读取请求会被拒绝,导致监听无法正常触发。可以临时修改规则测试:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true; // 临时开放权限,测试后务必改回
    }
  }
}

测试通过后,再根据业务需求配置合适的安全规则。

5. 确认Firebase初始化正确

  • 检查App模块下是否存在google-services.json文件,且文件内容与Firebase控制台的配置一致。
  • 确认项目级build.gradle中已添加Google服务插件:
    plugins {
      id 'com.android.application'
      id 'com.google.gms.google-services' // 必须添加
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:20:22