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

Firebase无法获取文档字段值 提示Download Failure如何解决

Firestore读取用户文档触发失败回调的排查方案

按优先级从高到低依次排查修复即可:

  • 补全Firestore实例初始化
    现有代码仅声明了private FirebaseFirestore db;,从未执行实例化操作,调用db.collection()时会直接抛出空指针,触发失败回调。在鉴权逻辑前加一行初始化代码:
    db = FirebaseFirestore.getInstance();
    
  • 修复安全规则的两处致命错误
    当前配置的安全规则完全无法正常生效,会直接拦截所有读写请求:
    1. 缺少规则必填的数据库根路径匹配块,直接匹配/Users/{userID}不会命中任何文档路径
    2. 路径变量名大小写不匹配:路径声明的变量为userID(ID大写),权限判断里写的是userId(id小写),变量不一致会导致权限校验永远返回false
      替换为以下正确规则即可:
    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /Users/{userID} {
          allow read, write: if request.auth != null && request.auth.uid == userID;
        }
      }
    }
    
    注意:安全规则修改后最长需要1分钟左右完成同步,不要修改完立刻发起请求测试
  • 不要吞掉失败回调的异常信息
    现有失败回调仅打印固定文案,无法定位具体报错原因,修改为打印完整异常栈,后续出现问题可以直接从日志看到根因:
    .addOnFailureListener(e -> {
        Log.e(TAG, "Download Failure", e);
    })
    
  • 修正字符串比对的错误写法
    验证用户ID时使用==比对字符串是Java常见错误,==比对的是对象内存地址而非内容,即使两个字符串文本完全一致也可能返回false,内容比对请用以下写法:
    TextUtils.equals(currentUser.getUid(), "vfS6yOAJsjR49eWcXOeIvZCulJl2")
    
  • 异步调用注意事项
    documentRef.get()是异步网络请求,不要在addOnSuccessListener外层代码直接读取json变量,回调触发前json会一直为null,所有依赖stockList字段值的逻辑,必须全部写在onSuccess回调内部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:33:15