0

我正在開發一個使用Firebase作爲數據庫的Android應用程序。 在我的數據庫中有用戶和組。如何使用Android中的適配器顯示Firebase中的羣組列表?

Users node of db

每個用戶都有一個組的列表,他/她所屬的各組存儲爲組ID。 在db的另一個節點中,有每個組的名稱,groupImage,...的組列表。

Groups node of db

我怎麼能顯示該組的列表(用名義和形象)給使用FirebaseListAdapter或任何他的用戶ID的用戶?

p.s.問題不在於使用適配器,而是在獲取組的ID之後,訪問它們而不訪問整個組節點

回答

0

您應該使用回收視圖和適配器來顯示列表中的所有參數,這裏是一個Android的教程創建這樣一個列表https://developer.android.com/training/material/lists-cards.html

編輯:

您可以使用此功能爲你從用戶得到了各組ID:

public void getGroup(String id) 
    { 
     groupRef.child(id).addListenerForSingleValueEvent(new ValueEventListener() 
     { 

      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) 
      { 
       //do something 
       //add data to the list 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) 
      { 
       //do something 
      } 
     }); 
    } 
+0

問題不在於使用適配器,而是正確讀取數據。 我可以得到將用戶 - >組節點上的偵聽器的組ID,但是如何在不訪問整個組節點的情況下訪問組? – Ale

+0

您可以像每個用戶一樣爲每個涉及的組ID添加一個監聽器,然後在事件要求他們時添加每個組 –

+0

非常感謝!我在我的user-> groups節點中放置了一個監聽器,然後在OnDataChange內部,我爲(每個groupID)做了類似於 的操作getGroup(groupID); getGroup偵聽該組並將一個Group對象添加到HashMap中。 但是在哪個代碼點我打印列表?我不能在「for」循環之後打印它,因爲我的HashMap中仍然沒有數據(數據是異步讀取的) – Ale

0

如果你想要實現這個使用數據庫structur e,我在這些截圖中看到,您需要迭代兩次。首先,您需要查找用戶訂閱的所有組。這意味着您需要從users節點中找到組ID。比你需要再次迭代,找到組名稱,基於相應的組ID。之後顯示您需要的組名列表。

實現此目的的最簡單方法是將group id更改爲group name。這意味着,代替迭代兩次,您只需迭代一次。你的數據庫結構應該是這樣的:

user 
| 
--- // stuff 
| 
--- groups 
     | 
     --- group_1: true 
     | 
     --- group_2: true 
     | 
     --- group_3: true 
     | 
     --- group_4: true 
     | 
     --- group_5: true+ 
     | 
     --- // other stuff 

這意味着您可以遍歷:users/groups,實際上得到的是一個用戶已經訂閱組的名稱。這些是你需要的組名。

希望它有幫助。

+0

一切都好嗎?我可以幫助您提供其他信息嗎? –

相關問題