【发布时间】:2018-08-22 00:17:04
【问题描述】:
您好,我正在尝试上传多张图片,等待它们返回,将下载的 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);
}
}
在我上传的图片中
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();
});
}
Step 是我创建的一个自定义对象,它包含一个图像映射,其中一个字符串作为键,值是一个图像。我的图像类看起来像这样
public class Image implements Parcelable {
private String imageUrl;
private String imageReference;
public void Image(){
}
//Setters and getters here;
}
任何建议将不胜感激。谢谢!
【问题讨论】:
-
您是否尝试过使用 Tasks 的
whenAllSuccess()方法而不是whenAll()? -
我刚试了一下,可以得到所有的网址!非常感谢!
标签: android firebase task firebase-storage