如何访问嵌入在Firebase数据库中的子节点内的子节点?
这是我在firebase中的数据库结构。如何访问嵌入在Firebase数据库中的子节点内的子节点?
我要访问的消息下的child.I消息内容可以得到数孩子消息的孩子,但不能检索每个孩子的价值。
ref2
指向我的firebase实例。
我必须从particulat聊天室获取所有消息。
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) {
}
});
如果你想得到消息的孩子,我们需要像这样遍历。
'Kd4TN8fuda6CArtAUo0' - > '消息' - > '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
的值为空。 –
你是否检查过我的答案中的链接,它是由FireBase团队检查的。 –
是的,我在这里使用相同的查询。 –
您[R问题就在这里:
childDataSnapshot.child("messages").child("message")
你正在寻找一个叫做message
内messages
节点,它不存在。
您应该首先参考messages
节点,然后遍历所有孩子。
首先appoach是使用方法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对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
//....
}
我试过了这两个,但没有帮助。我的ref refrence是这个 ref2 = mDatabase1.child(“chatrooms”)。orderByChild(“roomName”)。equalTo(“s”); –
@GyanendraMani你的参考应该是聊天室内的消息nome。 –
这样的事情: DatabaseReference df = mDatabase.child(“Kd4TN8fuda6CArtAUo0”)。child(“messages”); df.addListenerForSingleValueEvent(新ValueEventListener(){} 其中 mdatabse指向mDatabase = FirebaseDatabase.getInstance()getReference( “聊天室”);。 –
我有更多的答案很简单:
您尝试访问消息像其他节点像chatpic,所有者等... // Ur Databas Ë引用父节点,当你企图为孩子使用下面的代码来访问消息:
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());
}
}
发布您的代码请 –
代码更新。 –
您正在使用错误的参考。检查答案。 –