gpt4 book ai didi

java - Tasks.await 不适用于 FirebaseStorage

转载 作者:行者123 更新时间:2023-11-29 23:21:16 29 4
gpt4 key购买 nike

我正在使用 FirebaseStorage 下载多个文件。下载文件的任务在一个 WHILE 循环中。 WHILE 循环位于另一个 FOR 循环内。问题是我希望 WHILE 循环仅在所有下载完成后才继续前进。我尝试使用 Tasks.await(task) 但它似乎不起作用。你们能帮我解决这个问题吗?

For (DataSnapshot ds: datasnapshot.getChildren()){
...
while (i[0] < imgs.length) {
Task<Uri> task = mStorageReference.child(uid).child("notes").child(imgname).getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
...
});
try {
Tasks.await(task);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
i[0]++;
}
}

我也尝试在存储任务中使用 i[0]++,但循环只是卡住。

最佳答案

调用 Task.await()在 Android 上是一个问题的秘诀,因为即使它有效,它实际上也会阻塞主线程。你确定你不是在寻找 Task.whenAllComplete() ,它返回一个 Task当所有 getDownloadUrl 完成时任务完成。

实现它看起来像这样:

List<Task<Uri>> downloadUrlTasks = new LinkedList<Task<Uri>>();

while (i[0] < imgs.length) {
Task<Uri> task = mStorageReference.child(uid).child("notes").child(imgname).getDownloadUrl();
downloadUrlTasks.add(task);
i[0]++;
}

try {
Tasks.whenAllComplete(downloadUrlTasks).addOnCompleteListener(new OnCompleteListener<List<Task<Uri>>() {
@Override
public void onComplete(@NonNull List<Task<Uri>> tasks) {
// All tasks have completed, now you can get all download URLs by looping over the tasks
}
});
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

更简单:如果您只想处理从服务器成功获取的所有下载 URL,您可以使用 Tasks. whenAllSuccess :

 Tasks.whenAllSuccess(downloadUrlTasks).addOnSuccessListener(new OnSuccessListener<List<Uri>() {
@Override
public void onSuccess(@NonNull List<Uri> uris) {
// All tasks have succeeded, the uris list contains all download URLs
}
});

关于java - Tasks.await 不适用于 FirebaseStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269110/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com