java - 无法从 Firebase 访问嵌套数据
问题描述
在这种情况下,我正在尝试获取嵌套的 data.comments
任务类:
public class Mission implements Serializable {
private String body;
private String name;
private Integer vote;
private List<Comment> comments;
private int completedby;
Mission() {
}
public String getBody() {
return body;
}
public int getCompletedby() {
return completedby;
}
public String getName() {
return name;
}
public Integer getVote() {
return vote;
}
public List<Comment> getComment() {
return comments;
}
}
评论类:
public class Comment {
private String body;
private String username;
private int vote;
public Comment(){}
public String getBody() {
return body;
}
public String getUsername() {
return username;
}
public int getVote() {
return vote;
}
}
这就是我检索数据的方式。我无法访问评论正文。我可以顺便访问任务属性。(评论列表除外)
mydb.child("missions").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
missionMap.put(childSnapshot.getKey(),childSnapshot.getValue(Mission.class));
}
Log.d("working",missionMap.get(missionMap.keySet().toArray()[0]).getBody()); // working
Log.d("comment",missionMap.get(missionMap.keySet().toArray()[0]).getComment().get(0).getBody()); // not working
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
抛出的错误是。
java.lang.NullPointerException:尝试在空对象引用上调用接口方法“java.util.Set java.util.Map.keySet()”
由于某种原因,列表为空。它没有填充评论对象。
更新
我发现我的代码存在问题。在我的代码中,注释以 HashMap 的形式出现。我真的不关心评论 id。我只想将它们存储为一个列表。但是它们以 hashmap 的形式出现。如何在没有它们的 id 的情况下将它们作为列表检索?(例如 ciid)所以将所有评论作为评论对象存储在一个列表中。这就是我想要做的。我可以轻松地将 hashmap 值转换为列表,但也许还有另一种方法可以做到这一点
解决方案
错误信息是:
java.lang.NullPointerException
: 尝试在对象引用上调用接口方法“java.util.Set java.util.Map.keySet()
”null
所以你正在调用Map.keySet()
一个未初始化的对象。
您共享的代码中执行此调用的唯一位置如下所示:
missionMap.keySet()
因此,您似乎从未初始化missionMap
. 最简单的解决方法是在您的onDataChange()
:
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, Mission> missionMap = new HashMap<>();
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
missionMap.put(childSnapshot.getKey(),childSnapshot.getValue(Mission.class));
}
Log.d("working",missionMap.get(missionMap.keySet().toArray()[0]).getBody()); // working
Log.d("comment",missionMap.get(missionMap.keySet().toArray()[0]).getComment().get(0).getBody()); // not working
}
推荐阅读
- pine-script - 获取特定柱线的 EMA 数据
- amazon-web-services - AWS Route53 运行状况检查:如何在所有实例上允许 ip
- python - 无法安装我自己的 PyPi 包:无法满足要求
- javascript - JS/HTML Date picker enforce rule to ensure input is today
- r - 如果行中的变量在 R 中匹配或不匹配,如何将 1 和 0 分配给列
- reactjs - 我正在尝试使用 redux 实现撤消/重做——为什么当我更新原始对象时我的对象克隆会更新?
- c - 矩阵乘法:内存分配错误
- python - ValueError:未来属于与指定为循环参数的循环不同的循环
- c - 编写一个程序,计算并显示用户输入的正整数 n 的阶乘
- python-3.x - 如何对列中的字符串值进行分类以获得相关性?(Python)