【问题标题】:How to do Firebase chat pagination?如何进行 Firebase 聊天分页?
【发布时间】:2019-02-20 12:40:18
【问题描述】:

我在从 firebase DB 获取列表时遇到了这个问题,但我没有得到方法。

要求是 - 通过分页从 Db 获取 Firebase 聊天列表

【问题讨论】:

    标签: firebase pagination chat


    【解决方案1】:

    在这里,我完成了 Firebase-Chat-Pagination。检查一下。它可能对你有帮助。

        mUserRefValueEventListener = mConversationRef.child(mLocation)
                .limitToLast(TOTAL_ITEM_EACH_LOAD)
                .orderByKey()
                .addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        // It should be null when new meesage sent by own
                        mLastDataSnapshot = null;
                        if (dataSnapshot.exists()) {
                            mChatList.clear();
                            for (DataSnapshot readDataSnapshot : dataSnapshot.getChildren()) {
                                ChatResponse chatModel = readDataSnapshot.getValue(ChatResponse.class);
                                if (chatModel != null) {
                                    mChatList.add(chatModel);
                                }
                                // We need First DataSnapshot for pagination
                                if (mLastDataSnapshot == null) {
                                    mLastDataSnapshot = readDataSnapshot;
                                }
    
                            }
                            mView.onFetchMessagesSuccess(mChatList);
                        }
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
    
                    }
                });
    
    }
    
     public void loadMoreDataPagination() {
    
        if (mLastDataSnapshot != null && (mTotalCount == 0 || mView.getChatMessageCount() < mTotalCount)) {
            mUserRefValueEventListener = mConversationRef.child(mLocation)
                    .orderByKey()
                    .endAt(mLastDataSnapshot.getKey())
                    .limitToLast(TOTAL_ITEM_EACH_LOAD)
                    .addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
    
    
                            if (dataSnapshot.exists()) {
                                mChatList.clear();
                                for (DataSnapshot readDataSnapshot : dataSnapshot.getChildren()) {
                                    ChatResponse chatModel = readDataSnapshot.getValue(ChatResponse.class);
                                    if (chatModel != null) {
                                        mChatList.add(chatModel);
                                    }
                                    // We need Last DataSnapshot for pagination while load more
                                    if (mChatList.size() == 1) {
                                        mLastDataSnapshot = readDataSnapshot;
                                    }
                                }
                                // One item duplicates from last list so need to Remove it
                                mChatList.remove(mChatList.size() - 1);
                                mView.onFetchLoadMoreSuccess(mChatList, mTotalCount);
    
                            }
                        }
    
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            mView.hideLoading();
                        }
                    });
        }
    }```
    

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 2020-08-16
      • 1970-01-01
      • 2011-06-29
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多