如何从firebase中对对象进行排序?

Posted

技术标签:

【中文标题】如何从firebase中对对象进行排序?【英文标题】:How to sort an object from firebase? 【发布时间】:2021-11-30 09:08:43 【问题描述】:

我从 firebase 获取对象,有两种方法可以获取对象

这个

text1
15.10.2021
text3
12.10.2021
text2
29.11.2021
text4
1.1.2022

或者这个

text = text1 , date = 15.10.2021
text = text3 , date = 12.10.2021
text = text2 , date = 29.11.2021
text = text4 , date = 1.1.2022

我需要按日期对这个对象进行排序

text3 12.10.2021
text1 15.10.2021
text2 29.11.2021
text4 1.1.2022

我正在尝试将所有内容添加到列表中,但我不知道如何对它们进行排序。 在列表中它看起来像这样

[text1, 15.10.2021, text3, 12.10.2021, text2, 29.11.2021, text4, 1.1.2022]

我正在为 RecyclerView 做这件事,最初我是这样从 Firebase 获取日期和字符串的


        List<String> reminder = new ArrayList<>();
        List<String> date = new ArrayList<>();



        dbf.child("Reminders").addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) 

                reminder.clear();
                date.clear();


                for(DataSnapshot child2 : snapshot.getChildren())  // getting a data from DB to ArrayList for dropping into Adapter

                    for(DataSnapshot tChild : child2.getChildren()) 


                        if (tChild.getKey().equals("text")) 
                            reminder.add(tChild.getValue().toString());
                            rem = reminder.toArray(new String[reminder.size()]); // rem = String[]


                        
                        if (tChild.getKey().equals("date")) 
                            date.add(tChild.getValue().toString());
                            dat = date.toArray(new String[date.size()]); // dat = String[]


                        

                    



                    mainRowAdapter rAdapter = new mainRowAdapter(MainActivity.this, rem,dat);

                    rv.setAdapter(rAdapter);
                    rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));

                
            

            @Override
            public void onCancelled(@NonNull DatabaseError error) 

            
        );

然后在适配器类中使用方法setText()

所以,上面的问题

【问题讨论】:

【参考方案1】:

您的日期以字符串的形式存储,但遗憾的是无法按时间顺序排序。如果您想按日期排序,我建议将它们存储为 ISO-8601 格式,例如 "2021-10-15",以便它们的字典顺序与它们的时间顺序相匹配。

一旦你有了这种格式,你就可以按照正确的顺序从数据库中检索节点:

DatabaseReference reminders = dbf.child("Reminders");
Query remindersByDate = reminders.orderByChild("date");
remindersByDate.addValueEventListener(...

另见:

Firebase sort by points depending on date Firebase endAt() not working with date string? Querying by range in firebase

【讨论】:

我很震惊。多数民众赞成在帮助我。非常感谢!

以上是关于如何从firebase中对对象进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 firebaserecyclerAdapter 中对我的产品(项目)进行排序

如何在 Angularfire2 Angular2 中对 FirebaseListObservable 列表进行排序?

如何在Vue中对对象数组进行排序和过滤

如何在 Java 中对对象数组进行排序?

如何在 Swift 中对对象数组进行排序?

如何在javascript中对嵌套的对象数组进行排序?