StorageReference的getFile(File destinationFile(方法返回一个实际上是Task的
我有一个存储在firebase中的图像url数组,我已经在移动存储中使用了循环下载,在循环之后,我在网格视图中将其他方法设置为showImages
。下载没有问题,但下载需要一些时间,所以我想只有在所有图像都成功存储在移动存储中后才能执行showImage
。
我该如何完成这项任务?任何帮助对我都有很大帮助。
Class Images{
string imageUrl;
string name;
public Images(){
}
}
以下是用于在主活动中下载图像的代码。
for (Image image : imageList) {
String url = image.getImageUrl();
File file = new File(context.getExternalFilesDir, i + "_" + image.getName() + ".jpg");
if (!file.exists()) {
StorageReference downloadRef = FirebaseStorage.getInstance().getReferenceFromUrl(url);
downloadRef.getFile(file).addOnCompleteListener(new OnCompleteListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) {
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
i++;
}
}
showImages();
CCD_ 3用于显示图像。但它是在for循环后立即执行的,因为图像更大,所以下载需要一些时间。
那么,如何让showImages()
只有在所有镜像下载成功后才能执行呢。
FileDownloadTask
对象。
要解决此问题,您可以使用Tasks的whenAllSuccess(集合>任务(方法,如下所示:
List<Task<?>> tasks = new ArrayList<>();
tasks.add(downloadRef.getFile(file1));
tasks.add(downloadRef.getFile(file2));
tasks.add(downloadRef.getFile(file3));
//And so on
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list
for (Object object : list) {
//Show images
}
}
});