2017-02-13 88 views
1

我在下面有一個Firebase數據庫結構。我如何獲得room_name_public的價值?我想檢索所有這些值並在列表視圖中顯示它。這裏,55aqdTkLPrMwB6H0KX4Z0RUe6s52是一個Firebase用戶標識,-KcqR5Db5BidD0XpQ1z1是由push()函數創建的。如何獲取Firebase數據庫中的所有嵌套子數據?

enter image description here

+0

你想他們「每個用戶」?也就是說,您想要爲給定的用戶顯示關鍵字「room_name_pucblic」的所有值,對嗎? –

+0

好,所以你想要「public_rooms」節點的所有子節點,對吧? –

+0

是「public_rooms」 – TheSwiftGuy77

回答

0

好吧,你可以試試這種方式。

創建一個普通對象,像這樣:

public class Room { 
    String room_name_pucblic; 

    public Room() { 

    } 

    public Room(String room_name_pucblic) { 
     this.room_name_pucblic = room_name_pucblic; 
    } 

    public String getRoom_name_pucblic() { 
     return room_name_pucblic; 
    } 

    @Exclude 
    public Map<String, Object> toMap() { 
     HashMap<String, Object> result = new HashMap<>(); 
     result.put("room_name_pucblic", room_name_pucblic); 

     return result; 
    } 
} 

接着,在活動或片段,聲明和定義監聽器:

ValueEventListener roomsValueEventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot userDataSnapshot : dataSnapshot.getChildren()) { 
      if (userDataSnapshot != null) { 
       for (DataSnapshot roomDataSnapshot : userDataSnapshot.getChildren()) { 
        Room room = roomDataSnapshot.getValue(Room.class); 

        yourList.add(room.getRoom_name_pucblic()); 
        yourAdapter.notifyDataSetChanged(); 
       } 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

mFirebaseDatabaseReference.addListenerForSingleValueEvent(roomsValueEventListener); 

我假定mFirebaseDatabaseReference是的火力參考您的public_rooms節點。 yourList是連接到列表視圖的適配器的字符串ArrayList。

希望這有助於

更新

如果你想獲取用戶的房間,知道的用戶id,你必須編輯以這種方式以前的做法:

ValueEventListener roomsValueEventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 


     for (DataSnapshot roomDataSnapshot : dataSnapshot.getChildren()) { 
      Room room = roomDataSnapshot.getValue(Room.class); 

      yourList.add(room.getRoom_name_pucblic()); 
      yourAdapter.notifyDataSetChanged(); 
     } 


    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 


mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(); 
mFirebaseDatabaseReference.child(userId).addListenerForSingleValueEvent(roomsValueEventListener); 
+0

的所有節點,以及如果我想根據用戶提取房間(55aqdTkLPrMwB6H0KX4Z0RUe6s52)userID,該怎麼辦? – TheSwiftGuy77

+0

看到我的更新,它應該也工作 –

+0

更新dint的工作,我的數據庫引用有點像這樣,String userID = FirebaseAuth.getInstance()。getCurrentUser()。getUid(); mDatabase = FirebaseDatabase.getInstance()。getReference()。child(userID); – TheSwiftGuy77

相關問題