Android Studio中Firebase Firestore无法读取group_name字段值报错
问题根因与修复方案
1. 核心原因:数据读取路径不匹配
你写入Firestore的逻辑是将group_name存放在key变量对应的嵌套字段下,实际数据结构如下:
groups集合 > 以
key值命名的文档 > 以key值为键的顶层字段 > 嵌套对象 >group_name字段
但你读取时直接从文档顶层获取group_name,无法命中对应字段,返回null,最终导致后续操作触发空指针。
2. 修复代码
读取逻辑修正
db.collection("groups").document(key).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() { @Override public void onSuccess(DocumentSnapshot documentSnapshot) { mProgressCircle.setVisibility(View.INVISIBLE); if (documentSnapshot.exists()) { // 先获取key对应的嵌套Map Map<String, Object> groupData = (Map<String, Object>) documentSnapshot.get(key); if (groupData != null && groupData.containsKey("group_name")) { String groupName = (String) groupData.get("group_name"); groupList.add(groupName); adpter = new GroupAdapter(getActivity(), groupList); gridView.setAdapter(adpter); Log.w(TAG, "读取到组名:" + groupName); } else { Log.w(TAG, "未找到对应group_name字段"); } } else { Log.w(TAG, "目标文档不存在"); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { mProgressCircle.setVisibility(View.INVISIBLE); Log.w(TAG, "读取文档失败: " + e.getMessage()); } });
3. 额外注意事项
- 提前校验
key变量是否为空,避免访问不存在的文档路径 - 适配器初始化逻辑也可以提前到
onCreateView阶段,后续读取到数据后调用adapter.notifyDataSetChanged()刷新即可,代码可维护性更高 - 所有从Firestore读取的字段都要做非空判断,避免业务逻辑异常
可选优化:简化数据结构
如果每个文档仅存储一个分组信息,可简化写入逻辑,避免嵌套层级:
// 修改CreateNewGroup的写入逻辑,直接存groupData db.collection("groups").document(key).set(groupData) .addOnSuccessListener(/* 原有逻辑 */) .addOnFailureListener(/* 原有逻辑 */);
修改后读取时就可以直接用documentSnapshot.getString("group_name")获取字段值。
内容的提问来源于stack exchange,提问作者IceFox_Programming
相关产品推荐
相关产品推荐

