2015-01-04 213 views
2

我使用火力地堡的Android,使涉及羣體 的應用程序,我有一個用推法推看起來像這樣在我火力的項目清單:火力地堡數據檢索

-Groups Joined: 
       ~Unique Key: Group 1 Name 
       ~Unique Key: Group 2 Name 

我試圖檢索這個列表作爲我的android代碼中的Java列表。我需要能夠通過索引訪問組加入節點中的信息,而不是使用唯一密鑰,我正在使用此代碼。

Query groupsJoined = myUserRef.child("Groups Joined").orderByKey(); 

    groupsJoined.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      // do some stuff once 
      groupNames = (ArrayList<String>) snapshot.getValue(); 


     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
     } 
    }); 

代碼崩潰,因爲snapshot.getValue()返回一個map類型的對象。我沒有辦法訪問地圖的元素,因爲我沒有在android設備上存儲這些獨特的鍵,我不想。我怎樣才能獲得數據快照,以便我可以迭代並獲取組名,而無需使用唯一鍵?

+3

你可以迭代一個'Map'的值 - 是不夠的?請參閱http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#values()。 – stkent

+1

組自然按鍵排序,因此這裏的查詢不是必需的。你試過什麼了?數據很容易迭代。特別考慮到getChildren()返回Iterable。另外,您可能想要添加小孩而不是單個值事件。 – Kato

回答

4

Map轉換爲List非常簡單。

試試這個代碼:

myUserRef.child("Groups Joined").addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     // do some stuff once 
     Map groupNames = snapshot.getValue(); 
     List groupNamesList = new ArrayList(groupNames.values()); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
    } 
}); 

如果snapshot.getValue()默認行爲不剪,你也可以pass in a Java class,客戶端會嘗試將其deseralize到使用Jackson該類。