2016-07-27 1 views
3

Что я хочу?Android - Как получить список объектов в их порядке вставки из Firebase?

Я хочу получить список объектов в их порядке вставки из базы данных Firebase.

Как добавить объект в список в базе данных Firebase?

mRefUser.push(). SetValue (новый MessageItem());

mRefUser.push(). SetValue (новый MessageItem());

.

.

mRefUser.push(). SetValue (новый 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

orderByKey() как предложил Дима Ростопира в комментарии, работал на меня. –

ответ

3

Вы прочитали документацию? Ключи данных - это временная метка, поэтому они упорядочены по времени. Чтобы получить отсортированный запрос, вы должны использовать orderByKey() в базе данных. Подробнее об этом https://firebase.google.com/docs/database/android/retrieve-data#sorting_and_filtering_data

+0

Ping me, если вам нужен пример –

+0

Спасибо большое! это сработало ! –

0

Вот пример, иллюстрирующий ответ г-на Димы Ростопиры более четко. Вы видите «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 внутри класса и хотите получить весь firebase объект с помощью ПолучитьЗначение (Classname.класс)

Метод ниже поможет вам

получить его в TreeMap из HashMap и вы будете иметь упорядоченный список, как и в firebase ключом

Пример кода

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

Вы будете иметь упорядоченный список по ключу в объекте TreeMap.

где проект - это класс, имеющий несколько полей и один или несколько HashMap, и вы не хотите запрашивать их отдельно.

Смежные вопросы