我正在尝试将 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 问题,而是了解如何等待并行任务完成执行并继续处理结果。我怎样才能实现这个目标? 谢谢
最佳答案
Play services Task API实际上为许多 Firebase 客户端异步 API 提供支持,例如 Firebase 存储文件上传。您拥有的 UploadTask 是标准 Task 的子类接受成功和失败的监听器,就像您现在所做的那样。
如果您正在处理多个并发上传并希望知道它们何时全部完成,您可以使用 Tasks具有 whenAll() 的实用程序类接受多个任务对象的方法。该方法将返回一个新任务,您可以在其中注册其他成功和失败监听器。成功监听器将在所有任务完成后立即调用,失败监听器将在任何任务失败时调用。
您既可以在单个任务上注册监听器,也可以在从 Tasks.whenAll() 返回的复合任务上注册监听器。
(另外,请继续关注 upcoming blog series 关于使用具有各种 Firebase 功能的任务 API。)
关于java - 我如何执行多个 firebase 上传并等待集体结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39361415/