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

Firebase Firestore返回空QuerySnapshot但库中有数据,是什么原因?

排查步骤

  • 检查Firebase安全规则配置
    默认新建的Firestore数据库会限制未授权访问,若你未集成Firebase Auth登录逻辑也没有修改安全规则,读取请求会被官方拦截,返回空快照。开发阶段可临时使用测试规则验证(上线前必须调整为符合业务安全要求的规则):
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.time < timestamp.date(2024, 12, 31);
    }
  }
}
  • 核对集合、字段名称拼写
    Firestore的集合、文档、字段名称均大小写敏感,检查代码中写的集合名final是否和控制台中的集合名完全一致,没有大小写差异、多余空格或者拼写错误。同时确认final集合下的文档字段名是否和FirebaseModel中的属性名完全匹配,没有大小写偏差。
  • 确认文档为有效存储文档
    如果控制台中final集合下的文档名称为斜体显示,说明该文档是没有存储任何字段的虚拟父文档,仅用来承载子集合,这类文档不会被集合查询返回。需要确保你存储的文档都正常写入了image、title、detail三个字段。
  • 检查Firebase项目配置是否匹配
    确认你项目中引入的google-services.json文件和你存储数据的Firebase项目为同一个,若配置了其他项目的json文件,会连接到没有数据的空库导致查询为空。
  • 增加错误日志定位问题
    你当前的代码没有处理FirebaseFirestoreException错误参数,添加错误打印即可快速定位问题根源:
database.collection("final")
    .addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
            // 新增错误处理逻辑
            if (error != null) {
                Log.w("TAG", "数据监听失败", error);
                return;
            }
            assert value != null;
            Log.d("TAG", "onEvent: "+ value.isEmpty());
            models.clear();
      
            for (DocumentSnapshot snapshot : value.getDocuments()){
                FirebaseModel model = snapshot.toObject(FirebaseModel.class);
                assert model != null;
                models.add(model);
            }
            adapter.notifyDataSetChanged();
        }
    });

打印的错误日志会直接告知你是权限不足、路径不存在还是其他配置问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:06