【问题标题】:Sort nodes using TimeStamp of different key parent使用不同键父级的时间戳对节点进行排序
【发布时间】:2018-12-29 11:52:16
【问题描述】:

这是我的数据库结构:

- Feed
       _ Parent key 1:
                - key 1:
                        _ time_stamp: 3
                - key 2:
                        _ time_stamp: 4
       _ Parent key 2:
                - key 1:
                        _ time_stamp: 2
                - key 2:
                        _ time_stamp: 1

我的问题是我在使用时

Query query = mFeed.child(parent).orderByChild("time_stamp")

我得到的是 time_stamp 仅在父键上按此顺序排序

3 - 4 - 1 - 2

我想要得到的顺序是这样的:

1 - 2 - 3 - 4

请帮忙!!!

【问题讨论】:

  • 您共享的代码 (Query query = mFeed.child(parent).orderByChild("time_stamp")) 仅定义了一个查询。在您将侦听器附加到查询并尝试处理结果之前,此代码不会有问题。另外:在您显示的数据中,无法按顺序获取父键 1 和 2 的孙子,因为 Firebase 查询仅对直接子进行排序。有关这方面的更多信息,请参阅stackoverflow.com/questions/27207059/…
  • 我强烈建议您更新您的问题,以包含真正的最小完整代码和重现问题的 JSON。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取 JSON。
  • 嘿@naima 我的回答帮助您解决问题了吗?
  • 感谢您的回答,但我还没有找到解决方案。我不知道我应该如何构建我的数据以避免这个问题。

标签: java android firebase firebase-realtime-database


【解决方案1】:

您需要了解,当您对 Firebase 数据库进行查询时,可能会有多个结果。所以快照包含一个结果列表。

你可以有这样的代码,做你想做的事:

mFeed.orderByChild("time_stamp").limitToLast(4).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                String res = childSnapshot.getValue().toString().trim();
                // do what you want by adding them to arraylist or something
            }
        } 
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // do something for errors
    }
});

此外,您并不总是需要按您想要的顺序从 Firebase 获取列表,您可以在检索后随意排序。

【讨论】:

  • 即使我采纳了你的建议。我仍然没有得到我想要的订单。为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多