我开始使用Firebase,一切看起来都很不错,但是在recyclerview中有5万条记录可以显示,我无法弄清楚如何进行分页或类似操作,因为一次加载所有内容会花费太多时间。
我也没有运气,也使用过childEventListener和FirebaseUI。

更新1:
最终,我得到了更新1的支持,这不是最好的解决方案,但我想以后要进行一些更改。

private String lastKey = null;
private List<Comment> commentList = new ArrayList<>();

private final static int QUERY_LIMIT = 20;
private int page = 0;

private void loadComments() {
        page++;
        ChildEventListener childEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Comment comment = dataSnapshot.getValue(Comment.class);
                commentList.add(comment);
                adapter.notifyDataSetChanged();
                lastKey = String.valueOf(comment.getTimestamp());

            }

            @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 (lastKey != null) {
            commentList.clear();
            adapter.notifyDataSetChanged();
            comments.child(id_post).orderByChild("timestamp").endAt(lastKey).limitToLast(QUERY_LIMIT * page).addChildEventListener(childEventListener);
        } else {
            comments.child(id_post).orderByChild("timestamp").limitToLast(QUERY_LIMIT).addChildEventListener(childEventListener);
        }
    }

最佳答案

您可以添加一个值事件侦听器以限制要接收的结果数,这是firebase-ui中的一个简单示例

ref.limitToLast(5).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
    for (DataSnapshot msgSnapshot: snapshot.getChildren()) {
        Chat msg = msgSnapshot.getValue(Chat.class);
        Log.i("Chat", chat.getName()+": "+chat.getText());
    }
}


使用方法limitToLast(5)获取最后添加的5个对象。关于此的其他方法包括limitToFirst(),limitToLast(),startAt(),endAt()和equalTo()
可以在Here中找到更多信息。

09-17 22:50