首页 > 解决方案 > 不会为 ArrayList 中的每个项目调用 OnSuccessListener

问题描述

我有一个 Post 类的 ArrayList,其中包含用户发布的所有帖子。post 类有一个成员变量,其中包含 FireBase 存储中指向该帖子图像的路径。我正在尝试遍历列表,使用该路径获取每个帖子的下载 URL,然后使用适配器将图像添加到 gridview。但是,并非所有 URL 都被抓取。在我的个人资料上测试它时,个人资料页面只显示 4 个帖子,而我实际上已经做了 7 个。这是有问题的代码:

for (Post p : post_list)
                {
                    //Log.d("notebook", "loop");
                    storage.child(p.getPath()).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            urls.add(uri.toString());
                            GridAdapter gridAdapter = new GridAdapter(getActivity(), urls);
                            gridView.setAdapter(gridAdapter);
                        }
                    });
                }

循环确实循环了 7 次,但监听器只被调用了 4 次。

标签: javaandroid

解决方案


尝试在您的适配器设置代码中检查一个计数器,以便在像这样检索所有 url 后设置您的 gridview。

final int[] count = {1};

for (Post p : post_list)
            {
                //Log.d("notebook", "loop");
                storage.child(p.getPath()).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        urls.add(uri.toString());

                        count[0]++;

                        if(count[0] == post_list.size()) {
                           GridAdapter gridAdapter = new GridAdapter(getActivity(), urls);
                           gridView.setAdapter(gridAdapter);
                        }
                    }
                });

            }

推荐阅读