作者:爱娟一辈子-_709 | 来源:互联网 | 2023-02-13 12:33
我正在开发一个Android聊天应用程序,我需要通过时间戳订购对话详细信息.我的firebase数据结构如下所述.
我尝试了以下方法.
方法A.
定义DatabaseReference
DatabaseReference cOnversationReference= mFirebaseDatabaseReference
.child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("last_time_stamp").getRef();
定义FirebaseRecycler适配器
mFirebaseAdapter = new FirebaseRecyclerAdapter(
ConversationDetails.class,
R.layout.conversation_list_item,
ConversationsViewHolder.class, conversationReference) {
@Override
protected void populateViewHolder(ConversationsViewHolder viewHolder,
final ConversationDetails conversationDetails, int position) {
}
};
方法B:
在字段名称前加上减号
cOnversationReference= mFirebaseDatabaseReference
.child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("-last_time_stamp").getRef();
这两种方案都不起作用,只按照存储在firebase数据库中的数组顺序显示.但是,我需要显示具有较高值的会话详细信息last_time_stamp
作为第一个.
请任何人帮我找到解决方案.
1> drulabs..:
使用Query查询数据并执行orderByValue()
.这总是按升序提供数据.所以你可以反转数据,或翻转Recycler
视图以显示最新的聊天.
别忘了添加限制.使用限制从升序有序列表中获取最后一项.
Query chatQuery = conversationReference.orderByChild("last_time_stamp"). limitToLast(20);
这将按升序时间戳为您提供20个最新聊天记录.现在翻转此列表并使用它.
或者,您始终reverseLayout
可以true
在回收站视图中进行设置.还添加setStackFromEnd
到true
.