Android - 按时间戳订购Firebase数组

Rak*_*h L 4 android firebase firebase-realtime-database

我正在开发一个Android聊天应用程序,我需要通过时间戳订购对话详细信息.我的firebase数据结构如下所述.

在此输入图像描述

我尝试了以下方法.

方法A.

定义DatabaseReference

DatabaseReference conversationReference = mFirebaseDatabaseReference
                 .child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("last_time_stamp").getRef();
Run Code Online (Sandbox Code Playgroud)

定义FirebaseRecycler适配器

 mFirebaseAdapter = new FirebaseRecyclerAdapter<ConversationDetails,
                    ConversationsViewHolder>(
                    ConversationDetails.class,
                    R.layout.conversation_list_item,
                    ConversationsViewHolder.class, conversationReference) {


                @Override
                protected void populateViewHolder(ConversationsViewHolder viewHolder,
                                                  final ConversationDetails conversationDetails, int position) {
}
};
Run Code Online (Sandbox Code Playgroud)

方法B:

在字段名称前加上减号

conversationReference = mFirebaseDatabaseReference
                .child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("-last_time_stamp").getRef();
Run Code Online (Sandbox Code Playgroud)

这两种方案都不起作用,只按照存储在firebase数据库中的数组顺序显示.但是,我需要显示具有较高值的​​会话详细信息last_time_stamp作为第一个.

请任何人帮我找到解决方案.

dru*_*abs 5

使用Query查询数据并执行orderByValue().这总是按升序提供数据.所以你可以反转数据,或翻转Recycler视图以显示最新的聊天.

别忘了添加限制.使用限制从升序有序列表中获取最后一项.

Query chatQuery = conversationReference.orderByChild("last_time_stamp"). limitToLast(20);
Run Code Online (Sandbox Code Playgroud)

这将按升序时间戳为您提供20个最新聊天记录.现在翻转此列表并使用它.

或者,您始终reverseLayout可以true在回收站视图中进行设置.还添加setStackFromEndtrue.