Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 进行Firebase查询时遇到问题_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 进行Firebase查询时遇到问题

Android 进行Firebase查询时遇到问题,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我在android中使用回收器视图实现无休止的滚动时遇到了问题。基本上,我想要的是像instagram这样的东西,你可以无休止地滚动页面 我有一个Firebase数据库,其中有10个项目,我想显示3个项目,并为接下来的两个项目充电,然后当您滚动查看接下来的两个项目时,开始加载接下来的5个项目,以此类推。(您将看到示例中的大部分内容都是硬编码的) 我在进行Firebase查询时遇到以下问题: myRef.orderByChild("id").startAt(page*5 + "").endAt(5

我在android中使用回收器视图实现无休止的滚动时遇到了问题。基本上,我想要的是像instagram这样的东西,你可以无休止地滚动页面

我有一个Firebase数据库,其中有10个项目,我想显示3个项目,并为接下来的两个项目充电,然后当您滚动查看接下来的两个项目时,开始加载接下来的5个项目,以此类推。(您将看到示例中的大部分内容都是硬编码的)

我在进行Firebase查询时遇到以下问题:

myRef.orderByChild("id").startAt(page*5 + "").endAt(5+page*5 + "")
我想得到的是,在我目前的位置,接下来的5件物品的id介于-5和10之间。但是,当我这样做时:

    myRef.orderByChild("id").startAt(page*5 + "").endAt(5+page*5 + "")
            .getRef().addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int i = 0;
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                if(i == 5) break;
                mDataset.add(postSnapshot.getValue(Card.class));
                i++;
            }

            mAdapter = new CustomAdapter(mDataset);
            mRecyclerView.setAdapter(mAdapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
所有PostSnapshot都返回ID 1、2、3、4、5。制造出无休止滚动的幻觉,但每次收费相同的5项

谢谢

编辑:

EndlessScrollListener

public abstract class EndlessScrollListener extends RecyclerView.OnScrollListener {
    private int mVisibleThreshold = 2,
            mCurrentPage = 0,
            mPreviousTotalItemCount = 0,
            mStartingPageIndex = 0;

    private boolean mLoading = true;

    RecyclerView.LayoutManager mLayoutManager;

    public EndlessScrollListener(){}

    public EndlessScrollListener(LinearLayoutManager layoutManager){
        mLayoutManager = layoutManager;
    }

    public EndlessScrollListener(int visibleThreshold){
        mVisibleThreshold = visibleThreshold;
    }

    public int getLastVisibleItem(int[] lastVisibleItemPositions){
        int maxSize = lastVisibleItemPositions[0];
        for(int i = 1; i < lastVisibleItemPositions.length; ++i){
            if(lastVisibleItemPositions[i] > maxSize)
                maxSize = lastVisibleItemPositions[i];
        }
        return maxSize;
    }

    @Override
    public void onScrolled(RecyclerView view, int dx, int dy){
        int lastVisibleItemPosition = 0,
                totalItemCount = mLayoutManager.getItemCount();

        if (mLayoutManager instanceof LinearLayoutManager) {
            lastVisibleItemPosition =
                    ((LinearLayoutManager) mLayoutManager).findLastVisibleItemPosition();
        }

        if(totalItemCount < mPreviousTotalItemCount){
            mCurrentPage = mStartingPageIndex;
            mPreviousTotalItemCount = totalItemCount;
            mLoading = totalItemCount == 0;
        }

        if(mLoading && totalItemCount > mPreviousTotalItemCount){
            mLoading = false;
            mPreviousTotalItemCount = totalItemCount;
        }

        if(!mLoading && (lastVisibleItemPosition + mVisibleThreshold) > totalItemCount){
            mCurrentPage++;
            onLoadMore(mCurrentPage, totalItemCount, view);
            mLoading = true;
        }
    }

    public abstract void onLoadMore(int page, int totalItemsCount, RecyclerView view);

    public void resetState(){
        mCurrentPage = mStartingPageIndex;
        mPreviousTotalItemCount = 0;
        mLoading = true;
    }
}

如何确定
page
?@Drew page通过每次(lastVisibleItemPosition+MVVisibleThreshold)>TotalItemCountThank@Levon上的ScrollListener来确定,您能用ScrollListener更新您的原始帖子吗?完整的代码将使确定问题变得更容易
scrollListener = new EndlessScrollListener(mLayoutManager) {
        @Override
        public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
            System.out.println("Dale... Page: " + page + " items: " + totalItemsCount);

            loadData(page);
        }
    };