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()); } });
额外说明
- 原代码中的
model.oneRule调用是无效的,你的Rules实体类没有定义oneRule字段,直接删除即可。 - 现有Rules实体类的无参构造、getter方法都符合Firebase序列化要求,无需修改。
内容的提问来源于stack exchange,提问作者user16457449
相关产品推荐
相关产品推荐

