我以这种方式做了几乎相同的事情:
在你的类中(我假设是一个Activity),创建一个Query类型的成员变量:
private Query queryChat;
在onStart方法中,开始查询:
@Override
public void onStart() {
super.onStart();
// initialize your value event listener
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}
pageSize 是一个 int 变量,这里必须设置为 100。
这样做,您首先对您的消息进行升序(因此,结果排序列表中的第一条消息是最旧的),然后您选择最后的pageSize 消息(所以,@ 987654329@ 按时间顺序排在最后)。因此,您将收到第一条(按时间顺序,从最新开始)pageSize 消息。
我假设您已经在这里实现了ValueEventListener。此外,timestamp 是 Firebase 消息中的一个字段,您在其中存储了时间戳(以毫秒为单位)。
现在,像这样在你的类中定义一个方法:
private void loadMoreItems() {
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.endAt(messageList.get(messageList.size()-1).getTimestamp())
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}
这里的messageList 是一个存储聊天消息的 ArrayList,当您从 firebase 获取消息时,它会填充在 ValueEventListener 中。
在这里,我告诉 firebase 执行升序(和以前一样),但只选择那些时间戳 .endAt(messageList.get(messageList.size()-1).getTimestamp()) 正是告诉 firebase 这个) ,最后像以前一样limitToLast。
现在您可以随时调用此方法 (loadMoreItems)(在您的情况下,当用户拉动刷新时)。