Android的 - 如何从Firebase的插入顺序检索对象的列表? [英] Android - How to retrieve list of objects in their insertion order from Firebase?

查看:144
本文介绍了Android的 - 如何从Firebase的插入顺序检索对象的列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

b
$ b

我如何将对象添加到Firebase数据库中列出?



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

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

<



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

p>

如何添加?
$ b Firebase将每个对象存储为HashMap中的键值对。





我如何取回这些值?

  mFireBaseRefnew.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(D ataSnapshot dataSnapshot){
最终映射< String,MessageItem> messageMap = new LinkedHashMap< String,MessageItem>(); (DataSnapshot postSnapshot:dataSnapshot.getChildren()){
HashMap<
if(dataSnapshot!= null& amp; dataSnapshot.getValue()!= null){

串,MessageItem> messageMap =(HashMap< String,MessageItem>)postSnapshot.getValue();
集合< MessageItem> messageItems = messageMap.values();
List< MessageItem> messageItemList = new ArrayList< MessageItem>();
messageItemList.addAll(messageItems);


$ b @Override
public void onCancelled(FirebaseError firebaseError){


});

我得到了什么?




$ b 最后注意:



散列表键值是随机的。有没有办法获得链接哈希映射而不是哈希映射。我不想存储密钥,因为数据库维护顺序,应该有一些方法让他们在相同的顺序,但我不知道如何让他们。

解决方案

你读过文档吗?数据键是基于时间戳的,所以他们按时间排序。要获得排序的查询,您必须在数据库引用上使用 orderByKey()。详细了解 https://firebase.google.com/docs/database/ android / retrieve-data#sorting_and_filtering_data


What i want ?

I want to retrieve the list of objects in their insertion order from Firebase Database.

How i am adding the object to list in Firebase database ?

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

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

.

.

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

How its getting added ?

Firebase stores each object as key value pair in HashMap.

How i am retrieving these value ?

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

        }
    });

What i am getting ?

Last Note :-

The hashmap keys are in random order. Is there any way to get linked hash map instead of hashmap. i dont want to store the keys since database is maintaining the order , there should be some way to get them in the same order but i dont know how to get them.

解决方案

Have you read documentation? Data keys is timestamp based, so they ordered by time. To get sorted query you must use orderByKey() on database reference. More about it https://firebase.google.com/docs/database/android/retrieve-data#sorting_and_filtering_data

这篇关于Android的 - 如何从Firebase的插入顺序检索对象的列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆