Firebase android pagination

后端 未结 10 1508
天命终不由人
天命终不由人 2020-11-28 09:14

I\'m building an app which will show videos stored on firebase. The list of videos needs to be paginated fetching most recent 20 videos at a time.

Here is

10条回答
  •  一生所求
    2020-11-28 09:17

    Below is the code I'm using for pagination which shows the latest node first.

          public void getImages() {
                Query imagesQuery = FirebaseDatabase.getInstance().getReference().child("englishDps").child(mChildName).orderByKey().limitToLast(21);
    
                ChildEventListener childEventListener = new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                        Image image = dataSnapshot.getValue(Image.class);
                        image.setNodeKey(dataSnapshot.getKey());
    
                        mTempImages.add(image);
                        if (mTempImages.size() == 21) {
                            mLastKey = mTempImages.get(0).getNodeKey();
                            Collections.reverse(mTempImages);
                            mTempImages.remove(mTempImages.size() - 1);
                            mImages.addAll(mTempImages);
                            setAdapter();
                        }
                    }
    
                    @Override
                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
                    }
    
                    @Override
                    public void onChildRemoved(DataSnapshot dataSnapshot) {
    
                    }
    
                    @Override
                    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        if (isAdded()) {
                            Toast.makeText(getActivity(), "Problem loading more images...", Toast.LENGTH_LONG).show();
                        }
                    }
                };
    
                imagesQuery.addChildEventListener(childEventListener);
            }
    
    
      @Override
        public void getMoreImages() {
            if (!mGettingMoreImages) {
                mGettingMoreImages = true;
                Query imagesQuery = FirebaseDatabase.getInstance().getReference("englishDps").child(mChildName).orderByKey().endAt(mLastKey).limitToLast(21);
    
                ChildEventListener childEventListener = new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                        Image image = dataSnapshot.getValue(Image.class);
                        image.setNodeKey(dataSnapshot.getKey());
                        mMoreImages.add(image);
                        if (mMoreImages.size() == 21) {
                            mLastKey = mMoreImages.get(0).getNodeKey();
                            Collections.reverse(mMoreImages);
                            mMoreImages.remove(mMoreImages.size() - 1);
                            mImages.addAll(mMoreImages);
                            mMoreImages.clear();
                            mGettingMoreImages = false;
                            mImagesAdapter.notifyDataSetChanged();
                            return;
                        }
    
                        if (mLastKey.equalsIgnoreCase(image.getNodeKey())) {
                            Collections.reverse(mMoreImages);
                            mImages.addAll(mMoreImages);
                            mMoreImages.clear();
                            mGettingMoreImages = false;
                            mImagesAdapter.onNoMoreImages();
                            ;
                            mImagesAdapter.notifyDataSetChanged();
                        }
                    }
    
                    @Override
                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
                    }
    
                    @Override
                    public void onChildRemoved(DataSnapshot dataSnapshot) {
    
                    }
    
                    @Override
                    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        if (isAdded()) {
                            Toast.makeText(getActivity(), "Problem loading more images...", Toast.LENGTH_LONG).show();
                        }
                    }
                };
    
                imagesQuery.addChildEventListener(childEventListener);
            }
        }
    

提交回复
热议问题