我想在这种情况下获得嵌套的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:尝试调用接口方法 'null对象引用上的'java.util.Set java.util.Map.keySet()'
由于某种原因,List为null。它没有填充注释对象。
更新
我发现我的代码存在问题。在我的代码中,评论将作为HashMap发布。我真的不关心评论id。我只想将它们存储为List.But它们将作为hashmap出现。如何将它们作为列表检索而没有它们的ID? (例如ciid)所以将所有注释作为注释对象存储在列表中。说明我想要做什么。我可以将hashmap值转换为容易列表,但也许有另一种方法可以做到这一点
答案 0 :(得分:0)
试试这段代码..
eval
答案 1 :(得分:0)
错误消息是:
上
java.util.Set java.util.Map.keySet()
:尝试调用接口方法&#39;null
&#39;在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
}
:
CMAKE_PREFIX_PATH
答案 2 :(得分:0)
要获得这些价值,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ciidRef = rootRef.child("id").child("missions").child("comments").child("ciid");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String body = dataSnapshot.child("body").getValue(String.class);
String username = dataSnapshot.child("username").getValue(String.class);
long vote = dataSnapshot.child("vote").getValue(Long.class);
Log.d("TAG", body + " / " + username + " / " + vote);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
ciidRef.addListenerForSingleValueEvent(valueEventListener);
theutut将是:
//blank String
//blank String
0