Java 如何执行多个firebase上载并等待集体结果

Java 如何执行多个firebase上载并等待集体结果,java,android,firebase-storage,Java,Android,Firebase Storage,我正在玩一个照片收集应用程序中烘焙的Firebase存储,该应用程序可以收集照片并将其上传到Firebase存储后端。我想上传多张照片,等待所有任务完成,收集下载URL并继续下一步。下面是我的代码 public void saveImageData() { Incident incident = new Incident(); final ArrayList<Uri> downloadUris = new ArrayList<>(); S

我正在玩一个照片收集应用程序中烘焙的Firebase存储,该应用程序可以收集照片并将其上传到Firebase存储后端。我想上传多张照片,等待所有任务完成,收集下载URL并继续下一步。下面是我的代码

    public void saveImageData() {
    Incident incident = new Incident();
    final ArrayList<Uri> downloadUris = new ArrayList<>();

    StorageReference storageRef = storage.getReferenceFromUrl(Constants.FIREBASE_URL);
    for (Uri uri : imageUris) {
        StorageReference imagesRef = storageRef.child("images/" + uri.getLastPathSegment());
        uploadTask = imagesRef.putFile(uri);
        uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                downloadUris.add(taskSnapshot.getDownloadUrl());
                Log.e(TAG, "Size of data: " + downloadUris.size());
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

            }
        });
    }
}
public void saveImageData(){
事件=新事件();
最终ArrayList downloadUris=新ArrayList();
StorageReference storageRef=storage.getReferenceFromUrl(Constants.FIREBASE\u URL);
for(Uri:ImageURI){
StorageReference imagesRef=storageRef.child(“images/”+uri.getLastPathSegment());
uploadTask=imagesRef.putFile(uri);
uploadTask.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
downloadUris.add(taskSnapshot.getDownloadUrl());
Log.e(标记“数据大小:”+downloadUris.Size());
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
}
});
}
}
我希望收集所有URI并使用下载URI中存储的结果。当我键入此命令时,我意识到这可能不是firebase的问题,而是了解如何等待并行任务完成执行并继续处理结果。我怎样才能达到这个目标? 感谢

事实上,Firebase客户端异步API的大部分功能都是通过它实现的,比如Firebase存储文件上传。您拥有的UploadTask是标准的一个子类,它接受成功和失败侦听器,就像您现在所做的那样

如果您正在处理多个并发上载,并且希望知道所有上载何时完成,那么可以使用实用程序类,该类有一个接受多个任务对象的方法。该方法将返回一个新任务,您可以在其中注册其他成功和失败侦听器。一旦所有任务完成,就会调用成功监听器,如果任何任务失败,就会调用失败监听器

您可以在单个任务上注册侦听器,也可以在从tasks.whenAll()返回的复合任务上注册侦听器


(另外,请继续关注有关使用具有各种Firebase功能的任务API的详细信息。)

建议的答案对您的情况有帮助吗?