上传多张图片并等待完成,然后返回android和firebase

inh*_*ler 5 android task firebase firebase-storage

您好,我正在尝试上传多个图像,等待它们返回,将下载uri编译为一个对象,然后将其发送回我的活动。我将其用作上载参考,firebase。到目前为止,我有这个

 private void saveStepWithImages(@NonNull Step step, Callback callback){

    if(step.getStepId() == null){
       Collection<Image> images =  step.getImages().values();

        List<Task<Uri>> taskArrayList= new ArrayList<>();
        for (Image i: images) {
            taskArrayList.add(uploadImageTask(new ImageUtils().StringToBitMap(i.getImageUrl()), i.getImageReference()));
        }

        Tasks.whenAll(taskArrayList).addOnCompleteListener(task -> {
            Uri downloadUri = task.getResult(); // throws an error because task.getResult is void
        });

    }else{
        updateStepInFirebase(step, callback);
    }

}
Run Code Online (Sandbox Code Playgroud)

在我上传的图片中

private Task<Uri> uploadImageTask(final Bitmap bitmap, String prepend){
    final StorageReference ref = mStorageRef.child( prepend );

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] data = baos.toByteArray();

    UploadTask uploadTask = ref.putBytes(data);
    bitmap.recycle();

    return uploadTask.continueWithTask(task -> {
        bitmap.recycle();
        return ref.getDownloadUrl();
    });
}
Run Code Online (Sandbox Code Playgroud)

步骤是我创建的自定义对象,其中包含一个以字符串为键且值为图像的图像映射。我的图片类看起来像这样

public class Image implements Parcelable {

    private String imageUrl;
    private String imageReference;


    public void Image(){

    }

    //Setters and getters here;
}
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激。谢谢!

Ale*_*amo 5

解决此问题的关键是使用Tasks的whenAllSuccess()方法:

返回带有任务结果列表的任务,当所有指定任务成功完成时,任务结果列表将成功完成。

插入Tasks的whenAll()方法:

返回所有指定任务成功完成时成功完成的任务。

请查看有关Tasks类的更多信息。