java - Firestore Android 分页中的 ArrayIndex 错误

标签 java android firebase google-cloud-firestore pagination

在android firestore应用程序中实现分页时,当滚动完成直到结束时,会出现如下错误

在 Android Firestore 应用程序中对数据进行分页时遇到此错误

java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1

在行

lastVisible = t.getResult().getDocuments().get(t.getResult().size() - 1);

下面是已实现的代码

    query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                for (DocumentSnapshot document : task.getResult()) {
                    ProductModel productModel = document.toObject(ProductModel.class);
                    list.add(productModel);
                }
                productAdapter.notifyDataSetChanged();
                lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);

                RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
                    @Override
                    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                        super.onScrollStateChanged(recyclerView, newState);
                        if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                            isScrolling = true;
                        }
                    }

                    @Override
                    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                        super.onScrolled(recyclerView, dx, dy);

                        LinearLayoutManager linearLayoutManager = ((LinearLayoutManager) recyclerView.getLayoutManager());
                        int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition();
                        int visibleItemCount = linearLayoutManager.getChildCount();
                        int totalItemCount = linearLayoutManager.getItemCount();

                        if (isScrolling && (firstVisibleItemPosition + visibleItemCount == totalItemCount) && !isLastItemReached) {
                            isScrolling = false;
                            Query nextQuery = productsRef.orderBy("productName", Query.Direction.ASCENDING).startAfter(lastVisible).limit(limit);
                            nextQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<QuerySnapshot> t) {
                                    if (t.isSuccessful()) {
                                        for (DocumentSnapshot d : t.getResult()) {
                                            ProductModel productModel = d.toObject(ProductModel.class);
                                            list.add(productModel);
                                        }
                                        productAdapter.notifyDataSetChanged();

//Error Line                                      
  lastVisible = t.getResult().getDocuments().get(t.getResult().size() - 1);

                                        if (t.getResult().size() < limit) {
                                            isLastItemReached = true;
                                        }
                                    }
                                }
                            });
                        }
                    }
                };
                recyclerView.addOnScrollListener(onScrollListener);
            }
        }
    });

最佳答案

很明显,task.getResult().size() 返回 0。此错误表明您在最后一页获得空结果 - 没有更多文档可供分页通过。您需要忽略最后一页。不要尝试渲染它。

关于java - Firestore Android 分页中的 ArrayIndex 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61743537/

相关文章:

javascript - Firebase Cloud Function 已完成,状态为 '' 错误''

java - 编译器无法识别 setOnClickListener(....);

Android - 如何将 Spinner 中的选择添加到 EditText

Android,关于用户界面设计

java - Android 对话框显示空弹出窗口

javascript - 使用 Value() 方法从 Firebase 检索对象

ios - 我们在此 Google 项目中找不到包 ID '...'

java - xml 声明只允许在文档的开头

java - 递归 - 为什么要使用 return 语句

java - 查询迭代时出现 org.hibernate.ObjectNotFoundException