[英]How do I access the child nodes nested inside child node in Firebase database?
這是我在firebase中的數據庫結構。
我想訪問消息子項下的消息內容。我可以獲取消息子項的子項計數,但無法檢索每個子項的值。
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) {
}
});
如果您想讓消息成為孩子,我們需要像這樣遍歷。
'Kd4TN8fuda6CArtAUo0'->'消息'->'Kd4TQPrAWsNY1vcid1P'->'消息'
嘗試這個 :
<yourref>.child('Kd4TN8fuda6CArtAUo0').child('messages').child('Kd4TQPrAWsNY1vcid1P').child('message')
請參閱FireBase團隊的此鏈接: 轉換為Firebase數據庫的常見SQL查詢-SQL開發人員的Firebase數據庫#4
您的問題在這里:
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
//....
}
我有一個更簡單的答案:
您將嘗試像其他節點(如chatpic ,owner等)一樣訪問消息節點。//當您試圖作為子節點訪問消息時,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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.