【问题标题】:How to do pagination on firebase db on android?如何在android上的firebase db上进行分页?
【发布时间】:2020-08-28 13:09:31
【问题描述】:

我有一个由 cmets 填充的提要,我只是先加载最新的,当用户请求更多 cmets 时,它们将被加载(从最新到最旧的)。

这就是我的数据库的样子:

因此,假设我想一次只返回 1 条评论以开始...提要将从数据库列表中的最后一条评论开始,因为它是最近的评论,然后当用户请求它时我想加载中间的,但它必须放在我的 recyclerView 下方等等......

这是我的代码:

private void loadData(long lastDate) {
    Query query;

    if (lastDate == 0) {
        query = Util.mServerDatabaseRef.child(Util.getServer().getServerUID()).child("timeline").child("commentList").orderByChild("date").limitToLast(1);
    } else {
        query = Util.mServerDatabaseRef.child(Util.getServer().getServerUID()).child("timeline").child("commentList").orderByChild("date").endAt(lastDate).limitToFirst(1);
    }

    new Thread(() -> query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            commentList = new ArrayList<>();
            for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                    commentList.add(userSnapshot.getValue(Comment.class));
                    adapter.notifyDataSetChanged();
            }
            mIsLoading = false;
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            mIsLoading = false;
        }
    })).start();
}

lastDate 是最后一条评论的日期是我的适配器列表;

第一次加载工作正常,但我无法解决此问题以从最新到最旧检索 cmets 并将其放置在每次下方。它的方式将返回或相同的评论或最旧的评论,并将其放在列表的顶部。当然,我也需要它一次处理超过 1 条评论。任何帮助表示赞赏

【问题讨论】:

    标签: android firebase-realtime-database android-recyclerview pagination endlessscroll


    【解决方案1】:

    我会尽量给你这个想法,下面是未经测试的。但它应该在第一次加载时给你最后的评论,然后每次加载更多时它应该给你一个下一个 cmets:

    尽量在最后一条评论之前保留评论时间的参考:

    //have this as a member field to keep a reference of it
    
    long dateBeforeLastComment = 0;
    
    //have this also as member field (don't recreate this or you will be clearing it every time you load more comments
    
    commentList = new ArrayList<>();
    

    第一次加载时,加载最后一条评论并保留之前的时间参考:

    private void loadData() {
    
    query =Util.mServerDatabaseRef.child(Util.getServer().getServerUID()).child("timeline").child("commentList").orderByChild("date").limitToLast(2);
    
    
    query.addListenerForSingleValueEvent(new ValueEventListener() {
    
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
    int index = 0;
    
    for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
    index++;
    
    if(index == 1){
    
    //keep reference
    dateBeforeLastComment = userSnapshot.child("date").getValue(Long.class);
    
    }else{
    //add to list
    commentList.add(userSnapshot.getValue(Comment.class));
    adapter.notifyDataSetChanged();
    }
    
    }
    
    mIsLoading = false;
    
    }
    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
    mIsLoading = false;
    }
    
    
    
    
    }
    

    现在,每次您想加载更多内容时,请尝试在前一个日期的引用处结束:

    private void loadMoreData() {
    
    if(dateBeforeLastComment != 0){
    
    query =Util.mServerDatabaseRef.child(Util.getServer().getServerUID()).child("timeline").child("commentList").orderByChild("date").endAt(dateBeforeLastComment).limitToLast(2);
    
    
    query.addListenerForSingleValueEvent(new ValueEventListener() {
    
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
    
    int index = 0;
    
    for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
    index++;
    
    if(index == 1){
    
    //keep reference again
    dateBeforeLastComment = userSnapshot.child("date").getValue(Long.class);
    
    }else{
    
    //add to list
    commentList.add(userSnapshot.getValue(Comment.class));
    adapter.notifyDataSetChanged();
    }
    
    }
    
    mIsLoading = false;
    
    }
    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
    mIsLoading = false;
    }
    
    
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多