按孩子时间

时间:2018-10-12 13:53:31

标签: android firebase firebase-realtime-database

enter image description here

这是我的数据库,我想按时间排列它们...

我的代码

mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(UID).child(userId);
mTimeReference.orderByChild("Time").addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String time = dataSnapshot.child("Time").getValue().toString();
            String message = dataSnapshot.child("Message").getValue().toString();
            LastSeen lastSeeen = new LastSeen();
            long lastTime = Long.parseLong(time);
            String lastSeenTime = lastSeeen.lastSeen(lastTime, getActivity());
            if(lastSeenTime == null) {
                holder.setTime("Just Now");
            }
            else {
                holder.setTime(lastSeenTime);
            }
            holder.setMessage(message);
            linearLayoutManager.setStackFromEnd(true);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

我有一个活动,其中显示了我所有的朋友ID。我希望它们按时间顺序显示在数据库中(它们发短信的最后时间)。

我当前的代码不起作用。

如果您不能解决问题,请至少告诉我如何将RecyclerView项放在顶部。就像我想把朋友B放在上面一样,怎么做?

1 个答案:

答案 0 :(得分:0)

您可以在客户端订购聊天,也可以使用索引的Firebase适配器。

为此,您需要在数据库中创建一个附加结构,如下所示:

root
- Chats...
- Messages...
- UserActiveChats
  - UserId <- your id
    - FriendUserId: TimeStamp
    - FriendUserId: TimeStamp

然后,您必须将“添加聊天消息(无论如何实现)”功能更改为WriteBatch,该功能如下:

  • 创建ChatMessage(与现在一样,位于/ Messages / userId / friendId /..)
  • 在以下位置创建/设置值 /UserActiveMessages/userId/friendId:ServerValue.TimeStamp

这样,您可以在/ UserActiveMessages / myUserId处创建查询,并按值(时间戳)对其进行排序,该值表示他们最后一次向您发送消息的时间。这样,您将获得向您发送消息的最新用户的有序列表。然后,您所需要做的就是使用索引化的FirebaseRecyclerAdapter来显示实际的聊天,而不仅仅是他们的userId。

keyQuery = rootReference.child('/UserActiveMessages/userId').orderByValue();
chatsRef = rootReference.child('/Messages/userId/');

FirebaseRecyclerOptions<Chat> options = new FirebaseRecyclerOptions.Builder<Chat>()
        .setIndexedQuery(keyQuery, chatsRef, Chat.class)
        .build();

在此处了解如何实施其余内容:https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md#using-firebaseui-with-indexed-data