这是我在firebase中的数据库结构。
我想访问消息child下的消息内容。我可以获取子节点的子节点数,但无法检索每个子节点的值。
ref2
指向我的firebase实例
我必须得到来自特定聊天室的所有消息。
ref2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
listText.add(childDataSnapshot.child("messages").child("message").getValue() + "");
listText.add(childDataSnapshot.child("messages").child("name").getValue() + "");
// userArrayList.add(new User("" + childDataSnapshot.child("username").getValue(), "" + childDataSnapshot.child("profileURL").getValue(), ""));
Log.v("messag_ids", "" + childDataSnapshot.child("messages").child("Kd4TQPrAWsNY1vcid1P").child("message")); //displays the key for the node
}
lvChat.setAdapter(new ChatAdapter(ChatActivity.this, listUsername, listText));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:0)
如果你想让消息成为子消息,我们需要像这样遍历。
'Kd4TN8fuda6CArtAUo0' - > 'messages' - > 'Kd4TQPrAWsNY1vcid1P' - > '消息'
试试这个:
<yourref>.child('Kd4TN8fuda6CArtAUo0').child('messages').child('Kd4TQPrAWsNY1vcid1P').child('message')
请参阅FireBase团队的此链接:Common SQL Queries converted for the Firebase Database - The Firebase Database For SQL Developers #4
答案 1 :(得分:0)
您的问题在这里:
childDataSnapshot.child("messages").child("message")
您正在寻找message
中名为messages
的节点,但该节点并不存在。
首先应该有messages
节点的引用,然后遍历所有子节点。
第一个方法是使用DataSnapshot
的方法来遍历孩子
并访问值使用:
ref2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
String name = (String) childDataSnapshot.child("name").getValue();
//Do the same for other properties.
}
//......
}
//..
}
否则第二种方法是使用内置的JSON-to-POJO串行器/解串器。
您可以使用Message.class
然后使用
ref2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
Message message = messageSnapshot.getValue(Message.class);
}
}
//..
}
您的Message
课程应该是这样的:
public class Message {
String name;
String message;
String chatroom;
public Message(){
//default constructor
}
//Getters and setters
//....
}
答案 2 :(得分:0)
我有更简单的答案:
您将尝试像其他节点一样访问消息节点,例如chatpic ,所有者等... // Ur数据库引用是父节点,当您尝试访问消息时,子节点使用以下代码:
for(DataSnapshot dataSnapshot1:mainSnapShot.child("message").getChildren()){
Map<?, ?> valuex = (Map<?, ?>) dataSnapshot1.getValue();
if (!TextUtils.isEmpty(valuex.get("message").toString())) {
Log.i("message",valuex.get("message").toString());
}
if (!TextUtils.isEmpty(valuex.get("name").toString())) {
Log.i("name",valuex.get("name").toString());
}
}