这是我的数据库,我想按时间排列它们...
我的代码
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放在上面一样,怎么做?
答案 0 :(得分:0)
您可以在客户端订购聊天,也可以使用索引的Firebase适配器。
为此,您需要在数据库中创建一个附加结构,如下所示:
root
- Chats...
- Messages...
- UserActiveChats
- UserId <- your id
- FriendUserId: TimeStamp
- FriendUserId: TimeStamp
然后,您必须将“添加聊天消息(无论如何实现)”功能更改为WriteBatch,该功能如下:
这样,您可以在/ 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