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

Firebase Firestore拉取数组时foreach不适用于DocumentSnapshot报错如何解决

报错原因

你调用的是document("rule").get()方法,返回的结果是单个DocumentSnapshot文档对象,不是集合查询的结果列表,不能直接用foreach遍历该对象,这就是报错的直接原因。

修复方案

直接将获取到的单个DocumentSnapshot转换为Rules实体类,再遍历内部的规则数组即可,无需额外遍历DocumentSnapshot:

修改后的Activity代码

FirebaseFirestore.getInstance().collection("categories").document(categoryId).collection("rules").document("rule").get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(@NonNull DocumentSnapshot documentSnapshot) {
        // 先判断文档是否存在
        if (!documentSnapshot.exists()) {
            rule.setText("暂无规则内容");
            return;
        }
        // 直接将文档转换为Rules实体
        Rules model = documentSnapshot.toObject(Rules.class);
        if (model == null || model.getTheRules() == null) {
            rule.setText("暂无规则内容");
            return;
        }
        // 拼接规则内容,用StringBuilder性能更好
        StringBuilder dataBuilder = new StringBuilder();
        for (String ruleItem : model.getTheRules()) {
            dataBuilder.append("\n*").append(ruleItem);
        }
        rule.setText(dataBuilder.toString());
    }
});

额外说明

  1. 原代码中的model.oneRule调用是无效的,你的Rules实体类没有定义oneRule字段,直接删除即可。
  2. 现有Rules实体类的无参构造、getter方法都符合Firebase序列化要求,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:30:05