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)
任何建议将不胜感激。谢谢!
解决此问题的关键是使用Tasks的whenAllSuccess()方法:
返回带有任务结果列表的任务,当所有指定任务成功完成时,任务结果列表将成功完成。
插入Tasks的whenAll()方法:
返回所有指定任务成功完成时成功完成的任务。
请查看有关Tasks类的更多信息。
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |