Android - 如何从Firebase检索其广告订单中的对象列表?

时间:2016-07-27 14:04:25

标签: android firebase firebase-realtime-database linkedhashmap

我想要什么?

我想从Firebase数据库中检索其插入顺序中的对象列表。

如何将对象添加到Firebase数据库中的列表?

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

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

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键是随机顺序。有没有办法获得链接哈希映射而不是hashmap。我不想存储密钥,因为数据库维护顺序,应该有一些方法让它们以相同的顺序,但我不知道如何获得它们。

4 个答案:

答案 0 :(得分:3)

您是否阅读过文档?数据键是基于时间戳的,因此它们按时间排序。要获得排序查询,必须在数据库引用上使用orderByKey()。关于它的更多信息https://firebase.google.com/docs/database/android/retrieve-data#sorting_and_filtering_data

答案 1 :(得分:1)

如果您在类中使用HashMap并希望使用getValue(Classname.class)获取整个firebase对象

下面的方法会帮助你

从HashMap进入TreeMap,你将按照按键在firebase中排序列表

示例代码

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

您将在TreeMap对象中按键排序列表。

其中project是一个包含多个字段和一个或多个HashMap的类,您不想单独查询每个字段。

答案 2 :(得分:0)

这是一个例子,可以更清楚地说明Dima Rostopira先生的回应。你看到&#34; orderByKey()&#34;?

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) {

    }
});

答案 3 :(得分:0)

要检索已排序的数据,请先指定其中一个order-by方法。 更多 https://firebase.google.com/docs/database/android/lists-of-data