【问题标题】:How do I execute multiple firebase uploads and wait for the collective results如何执行多个 Firebase 上传并等待集体结果
【发布时间】:2023-03-16 19:37:01
【问题描述】:

我正在尝试将 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) {

            }
        });
    }
}

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

【问题讨论】:

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

标签: java android firebase-storage


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2021-03-17
    • 2019-10-07
    • 2021-10-10
    相关资源
    最近更新 更多