Android - 按时间戳

时间:2017-02-01 09:58:38

标签: android firebase firebase-realtime-database

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

enter image description here

我尝试了以下方法。

接近A

定义DatabaseReference

DatabaseReference conversationReference = mFirebaseDatabaseReference
                 .child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("last_time_stamp").getRef();

定义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) {
}
};

方法B:

在字段名称前添加减号

conversationReference = mFirebaseDatabaseReference
                .child(USERS).child(mFirebaseUser.getUid()).child(CONV_DETAILS).orderByChild("-last_time_stamp").getRef();

这两种情况都不起作用,只按照存储在firebase数据库中的数组顺序显示。但是,我需要首先显示last_time_stamp值较高的会话详细信息。

请有人帮我找到解决方案。

2 个答案:

答案 0 :(得分:5)

使用Query查询数据并执行orderByValue()。这总是按升序提供数据。因此,您可以撤消数据,也可以翻转Recycler视图以显示最新的聊天内容。

不要忘记添加限制。使用限制从升序列表中获取最后一项。

Query chatQuery = conversationReference.orderByChild("last_time_stamp"). limitToLast(20);

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

或者您始终可以在回收站视图中将reverseLayout设置为true。 同时将setStackFromEnd添加到true

答案 1 :(得分:0)

只需在firebase回收器适配器中添加它 -

@Override
        public ModelClass getItem(int position) {
            return super.getItem(getItemCount() - 1 - position);
        }