Mav*_*eňツ 0 pagination android firebase firebase-realtime-database
我正在尝试在 android 中实现 Firebase,对此我有一些疑问,如果您能帮助我,我将很高兴。陷入其中有点困惑。这是我的问题。
我正在显示 Firebase 聊天,listview其中我只想从 Firebase 加载第一条 100 条消息,然后用户将pull-to-refresh加载第一条 200 条消息,依此类推。
为此,我正在寻找limitToFirst()但limitToLast()不知道哪一个更好。
任何人都可以帮忙吗?
我以这种方式做了几乎同样的事情:
在您的类(我假设是一个 Activity)中,创建一个Query类型的成员变量:
private Query queryChat;
Run Code Online (Sandbox Code Playgroud)
在该onStart方法中,开始执行查询:
@Override
public void onStart() {
super.onStart();
// initialize your value event listener
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}
Run Code Online (Sandbox Code Playgroud)
pageSize是一个int变量,这里必须设置为100。
通过这种方式,您首先对消息进行升序排列(因此,结果排序列表中的第一条消息是最旧的),然后选择最后一条消息pageSize(因此,pageSize按时间顺序排列的最后一条消息)。因此,您将收到第一条(按时间顺序,从最新的开始)pageSize消息。
我想你已经在ValueEventListener这里实现了。另外,timestamp是 firebase 消息中的一个字段,您在其中存储消息的时间戳(以毫秒为单位)。
现在,在您的类中定义一个方法,如下所示:
private void loadMoreItems() {
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.endAt(messageList.get(messageList.size()-1).getTimestamp())
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}
Run Code Online (Sandbox Code Playgroud)
这里messageList是一个 ArrayList,用于存储聊天消息,当您从 firebase 获取消息时,该 ArrayList 会填充到 ValueEventListener 中。
在这里,我告诉 firebase 执行升序(像以前一样),但只选择时间戳 <= 用户已经可见的最后一个项目的那些项目。(.endAt(messageList.get(messageList.size()-1).getTimestamp())告诉 firebase 正是这一点),最后limitToLast像以前一样。
现在,您可以loadMoreItems随时调用此方法( )(在您的情况下,当用户拉动刷新时)。
| 归档时间: |
|
| 查看次数: |
7861 次 |
| 最近记录: |