java - 不会为 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 次。
解决方案
尝试在您的适配器设置代码中检查一个计数器,以便在像这样检索所有 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);
}
}
});
}
推荐阅读
- unix-socket - 使用 AF_UNIX 成功调用 bind(2) 不会生成套接字文件
- java - 将几个不同的数据位存储到一个链表中
- python - 在 Python 中绘制斜坡脉冲函数
- lua - Corona Simulator 中的布尔偏好问题
- jquery - Fancybox 3.xx 在页面 div 的某处具有 min-height:100% 属性时出现错误
- java - Java 微服务之间的签名 JWT
- python - 如何在不广泛阅读文档的情况下计算python中rpt文件的数量?
- r - `rownames<-`(`*tmp*`, value = colnames(countData)) 中的错误:尝试在没有维度的对象上设置“rownames”
- excel - Excel VBA复制和粘贴具有某些值的单元格从一个工作表到另一个工作表
- aframe - 为什么我的光标没有在 Mobile VR 中显示?(1.0.4)