不会为ArrayList中的每个项目调用OnSuccessListener

时间:2018-11-21 01:12:08

标签: java android

我有一个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次。

1 个答案:

答案 0 :(得分:0)

尝试检查适配器设置代码中的计数器,以便在像这样检索到所有网址后设置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);
                        }
                    }
                });

            }