【发布时间】:2017-02-01 09:58:38
【问题描述】:
我正在开发一个 android 聊天应用程序,我需要在其中按时间戳对对话详细信息进行排序。下面提到了我的 firebase 数据结构。
我尝试了以下方法。
方法 A
定义数据库引用
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 的对话详细信息。
请任何人帮助我找到解决方案。
【问题讨论】:
-
是在创建条目时使用 ServerValue 生成的时间戳吗?
-
方法 B 不可用,您无法更改密钥。方法 A 应该有效。删除 get Ref 并使用 Query。
-
@gbaccetta 是的,已插入 SeverValue.TIMESTAMP 值
-
@drulabs 。让我试试这个并恢复你。
-
在你的 RecyclerView 和 ListView 中使用 reverseLayout = true。那应该行得通。 Yiou 也可以根据需要添加 stackFromEnd
标签: android firebase firebase-realtime-database