android - addOnSuccesListener 执行顺序问题,firebase 存储
问题描述
我有一个 StorageReference 元素,它存储来自 firebase 的文件夹引用,我遍历它的元素以获取每个下载链接,但我不明白为什么它按此顺序执行。我以前做过类似的事情并且它起作用了,但现在由于某种原因,我不明白为什么,它没有按应有的方式工作,以及为什么它会以这种方式跳动听众。
private interface FirestoreCallback {
void onCallback(List<Uri> uris);
}
public ArrayList<Uri> getAllDownloadURIs(final FirestoreCallback firestoreCallback) {
StorageReference folderPath = ListVideoDates.storage.getReference((String) extra.getSerializable("folderPath"));
System.out.println("FOLDER PATH: " + folderPath);
final ArrayList<Uri> uris = new ArrayList<>();
folderPath.listAll()
.addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
for (StorageReference file : listResult.getItems()) {
file.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
uris.add(uri);
System.out.println("Array inside onSucces2" + uris); // second
// here the array is printed as elements are
//inserted, but this listener is the last
//executed listener for some god damn reason
}
});
}
// firestoreCallback.onCallback(uris);
}
}).addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
// firestoreCallback.onCallback(uris);
System.out.println("Array inside onSucces3" + uris); // first
}
});
为什么执行的第一个侦听器是第二个侦听器,为什么然后它跳到 f“第一个”侦听器?我也尝试在两个位置插入回调(上面评论),无论监听器订单执行如何,它仍然不起作用,当我尝试使用下面的方法访问它时它仍然是空的。
public void setAllDownloadURIs() {
getAllDownloadURIs(new FirestoreCallback() {
@Override
public void onCallback(List<Uri> uri) {
uris = new ArrayList<>(uri);
System.out.println("URIS inside onCallback: " + uris);
}
});
}
FOLDER PATH: gs://***************************
W/StorageUtil: no auth token for request
I/System.out: URI inside setAllDownloadURIs: null
W/NetworkRequest: no auth token for request
I/System.out: Array inside onSucces3[]
W/StorageUtil: no auth token for request
W/NetworkRequest: no auth token for request
W/StorageUtil: no auth token for request
W/NetworkRequest: no auth token for request
W/StorageUtil: no auth token for request
W/StorageUtil: no auth token for request
W/NetworkRequest: no auth token for request
W/NetworkRequest: no auth token for request
I/System.out: Array inside onSucces2
I/System.out: Array inside onSucces2
I/System.out: Array inside onSucces2
I/System.out: Array inside onSucces2
在这里我得到 4 个数组输出,因为文件夹中有 4 个元素,并且在程序将它们插入数组时打印它们。
解决方案
推荐阅读
- php - Laravel 返回“SQLSTATE[HY000]:一般错误:1364 字段‘密码’没有默认值”
- python - Python 包中的子文件夹在安装时不可见
- java - 将eclipse项目导出为.exe文件?
- angular - ngx 数据表向右移动列(添加填充)
- reactjs - 添加带有样式的类没有任何作用 - NextJS
- javascript - 我正在尝试使用 queryselectorall 选择多个元素,但它似乎不起作用,我不知道为什么
- java - 应用程序找不到文件夹
- php - Vanilla PHP api 只允许 POST 请求
- android - dagger.internal.codegen.ComponentProcessor 无法处理此类,因为并非所有依赖项都可以解决
- html - 为什么我的 CSS 动画会消耗这么多资源?