使用firebase数据库中的日期键对数组结果进行排序

时间:2017-11-29 18:54:06

标签: android firebase firebase-realtime-database android-recyclerview

我从RecyclerView中的firebase数据库中获取一些记录。我已经根据特定的键值获取数据。现在我想要为格式为MM-dd-yyyy的日期键对数据进行排序。我怎么排序呢?我的代码来获取它:

FirebaseRecyclerAdapter<Eventsdata,Eventshistory.Game> adapter=new FirebaseRecyclerAdapter<Eventsdata,Eventshistory.Game>(Eventsdata.class
                                                                                                 ,R.layout.eventshistoryrow
                                                                                                   ,Eventshistory.Game.class
                                                                                                  ,reference.child("Events").orderByChild("uid").equalTo(mAuth.getCurrentUser().getUid())
    )

Firebase Schema

我在这里根据uid获取记录,但我希望它按日期排序。

2 个答案:

答案 0 :(得分:0)

您需要修改模型。使用yyyy-mm-dd或使用UTC时间戳。 mm-dd-yyyy对于任何类型的自然分选都是完全没用的。

此外,您似乎必须实施自己的回收器适配器,手动获取数据,然后根据日期对其进行排序。这是因为firebase仅允许对一个子节点进行查询,这是您案例中的userID。所以你不能得到像“用户ID是这个用户ID,然后按日期排序”的数据

答案 1 :(得分:0)

如果我做对了,你会尝试根据添加的时间检索数据。

可能的解决方案

在添加(事件)数据的方法中,您还可以在每个事件ID中添加一个名为timestamp的新子项。

      //to get a time stamp you do this

       ServerValue.TIMESTAMP

所以这就是你添加数据的方式

          //if you use Map to add data, do this

          Map map=new HashMap();
          map.put("eventID", event_id); 
          map.put("gameFee", "200");
          //here you add timestamp
          map.put("timestamp", ServerValue.TIMESTAMP);
          ..........
           ......

所以现在每个事件id都有自己的时间戳。

现在您根据时间戳查询。

所以不要那样查询:

         reference.child("Events").orderByChild("uid").equalTo(mAuth.getCurrentUser().getUid();

这样做:

        reference.child("Events").orderByChild("timestamp");

您将根据发布日期检索数据。