2016-07-27 50 views
3

我想要什麼?Android - 如何從Firebase的插入順序中檢索對象列表?

我想從Firebase數據庫檢索其插入順序中的對象列表。

我如何將對象添加到Firebase數據庫中列出?

mRefUser.push()。setValue(new MessageItem()); ();}};}}};

。 ();}};}}};

如何添加?

Firebase將每個對象存儲爲HashMap中的鍵值對。

enter image description here

如何我正在檢索這些價值?

mFireBaseRefnew.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      final Map<String, MessageItem> messageMap = new LinkedHashMap<String, MessageItem>(); 
      if (dataSnapshot != null && dataSnapshot.getValue() != null) { 

       for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
        HashMap<String,MessageItem> messageMap = (HashMap<String, MessageItem>) postSnapshot.getValue(); 
        Collection<MessageItem> messageItems = messageMap.values() ; 
        List<MessageItem> messageItemList = new ArrayList<MessageItem>(); 
        messageItemList.addAll(messageItems);      
      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 

什麼,我的故事嗎?

enter image description here

末注: -

HashMap的鑰匙在隨機順序。有什麼辦法可以得到鏈接哈希映射而不是哈希映射。我不想存儲密鑰,因爲數據庫維護順序,應該有一些方法讓他們在相同的順序,但我不知道如何讓他們。

+0

在我的情況下,它也可以將舊時間戳的對象推到列表中,這就是爲什麼我沒有使用它。有沒有其他方法? –

+0

按照Dima Rostopira在評論中所建議的orderByKey(),爲我工作。 –

回答

0

下面舉例說明Dima Rostopira先生的回答更清楚。你看到「orderByKey()」嗎?

mFireBaseRefnew.orderByKey().addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     final Map<String, MessageItem> messageMap = new LinkedHashMap<String, MessageItem>(); 
     if (dataSnapshot != null && dataSnapshot.getValue() != null) { 

      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
       HashMap<String,MessageItem> messageMap = (HashMap<String, MessageItem>) postSnapshot.getValue(); 
       Collection<MessageItem> messageItems = messageMap.values() ; 
       List<MessageItem> messageItemList = new ArrayList<MessageItem>(); 
       messageItemList.addAll(messageItems);      
     } 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
1

如果您有內部類HashMap和想使用的getValue(類別名稱全火力對象。類)

方法波紋管將幫助您

從HashMap中讓它進入TreeMap和你的關鍵

示例代碼有排序列表中火力

TreeMap<String,Recordings> recordingsTreeMap = new TreeMap<>(); 
recordingsTreeMap.putAll(project.getRecordings()); 

您將有在TreeMap對象中按鍵排序。

其中項目是一個類有多個字段和一個或多個HashMap,你不想分別查詢每個。