当来自firebase的图像存储在存储器中时,如何执行一些操作



我有一个存储在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()只有在所有镜像下载成功后才能执行呢。

StorageReference的getFile(File destinationFile(方法返回一个实际上是Task的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
}
}
});

最新更新