首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase分页limitToFirst()与limitToLast()

Firebase分页limitToFirst()与limitToLast()
EN

Stack Overflow用户
提问于 2017-02-10 20:52:57
回答 2查看 6.7K关注 0票数 0

我试图在android中实现Firebase,我在其中有几个问题,如果你能帮助我进入这一点,我会很高兴。有点迷惑了。所以这是我的问题。

我在listview中显示Firebase聊天,在该用户执行pull-to-refresh之后,我只想从firebase加载前100条消息,然后加载前200条消息,依此类推。

为此,我在limitToFirst()limitToLast()中寻找,不知道哪一个更好。

有谁能帮帮忙。

EN

回答 2

Stack Overflow用户

发布于 2017-02-10 21:18:52

我几乎用这种方式做了同样的事情:

在您的类中(我假设这是一个活动),创建一个Query类型的成员变量:

代码语言:javascript
复制
private Query queryChat;

onStart方法中,开始执行查询:

代码语言:javascript
复制
@Override
public void onStart() {
    super.onStart();

    // initialize your value event listener

    queryChat= mFirebaseDatabaseReference.
            .orderByChild("timestamp")
            .limitToLast(pageSize);
    queryChat.addListenerForSingleValueEvent(yourValueEventListener);

}

pageSize是一个int变量,这里必须设置为100。

这样做,您首先对消息进行升序(因此,结果排序列表中的第一个消息是最旧的),然后选择最后的pageSize消息(因此,pageSize在时间顺序上是最后一个)。因此,您将获得第一条(按照时间顺序,从最新开始) pageSize消息。

我假设您已经在这里实现了一个ValueEventListener。此外,timestamp是firebase消息中的一个字段,您可以在其中存储以毫秒为单位的消息的时间戳。

现在,在类中定义一个方法,如下所示:

代码语言:javascript
复制
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) (在您的示例中,当用户执行pull to refresh时)。

票数 5
EN

Stack Overflow用户

发布于 2017-02-17 19:10:13

您可以尝试这样做:

代码语言:javascript
复制
int mPageEndOffset = 0;
int mPageLimit = 10;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    connectDetector = new ConnectDetector(getActivity());
    if(connectDetector.getConnection()) {

        alanRef = new Firebase(firebaseURL).child(EventChatActivity.SuperCateName + "/ " + eventDetail.getCategory_name() + "/ " + eventDetail.getEvent_title() + "/ " + EventChatActivity.eventID).child("StadiumChat");
        alanQuery = alanRef.limitToFirst(mPageLimit);
        userName = MyApp.preferences.getString(MyApp.USER_NAME, null);

        EventChatActivity.eventID).child("StadiumChat");
    }
}    

这将从firebase获取最近10条消息的记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42159878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档