Firebase数据库读取第二个值返回null问题求助
Firebase读取Scholar_id对应图片返回null的问题解决
问题根源
- Scholar_id格式不匹配:数据库中第二个回答的
Scholar_id带有前导空格(" 11111513710"),但images节点下的对应key是无空格的"11111513710",导致查询时找不到匹配节点,返回null。 - 代码循环逻辑冗余:内层循环获取
Scholar_id后直接break,虽当前数据结构下能运行,但逻辑不够严谨,且未处理字符串空格问题。
解决方案
1. 统一Scholar_id格式
要么在写入数据时对Scholar_id执行trim()去除前后空格,要么在读取时做去空格处理,确保和images节点的key完全匹配。
2. 优化数据读取代码
简化循环逻辑,同时处理Scholar_id的空格问题,修正后的代码如下:
DatabaseReference answersRef = database.getReference("QnA/Answers/" + pushkey); List<String> scholarIds = new ArrayList<>(); answersRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot answerSnapshot : dataSnapshot.getChildren()) { // 直接获取最内层的学者节点(每个answerSnapshot下仅一个子节点) DataSnapshot scholarSnapshot = answerSnapshot.getChildren().iterator().next(); String scholarId = scholarSnapshot.child("Scholar_id").getValue(String.class); // 去除前后空格,避免匹配失败 if (scholarId != null) { scholarId = scholarId.trim(); scholarIds.add(scholarId); } } for (String scholarId : scholarIds) { DatabaseReference imagesRef = database.getReference().child("images").child(scholarId); imagesRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String imageUrl = dataSnapshot.child("images").getValue(String.class); System.out.println("Scholar ID: " + scholarId + ", Image URL: " + imageUrl); } @Override public void onCancelled(DatabaseError databaseError) { System.out.println("Error reading image data: " + databaseError.getMessage()); } }); } } @Override public void onCancelled(DatabaseError databaseError) { System.out.println("Error reading answer data: " + databaseError.getMessage()); } });
额外建议
- 优先在数据写入阶段处理
Scholar_id的空格问题,从源头避免匹配错误。 - 可以定义POJO类映射Firebase的回答数据,减少手动解析的代码量和出错概率。
内容的提问来源于stack exchange,提问作者Remo
相关产品推荐
相关产品推荐

