如何执行多个firebase上传并等待集合结果

问题描述 投票:2回答:1

我正在玩Firebase存储,它被烘焙到一个照片集应用程序中,该应用程序收集照片并将它们上传到firebase存储后端。我想上传多张照片并等待所有任务完成,收集下载网址并继续下一步。这是我的代码如下

    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) {

            }
        });
    }
}

我希望收集所有的uris并使用存储在downloadUris中的结果。当我输入这个时,我意识到这可能不是一个firebase问题,而是了解如何等待并行任务完成执行并继续执行结果。我怎样才能实现这个目标?谢谢

java android firebase-storage
1个回答
7
投票

Play services Task API实际上支持Firebase客户端的大部分异步API,例如Firebase存储文件上传。您拥有的UploadTask是标准Task的子类,它接受成功和失败的侦听器,就像您现在正在做的那样。

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

您可以在各个任务以及从Tasks.whenAll()返回的复合任务中注册侦听器。

(另外,请继续关注使用具有各种Firebase功能的Task API的upcoming blog series。)

© www.soinside.com 2019 - 2024. All rights reserved.