gpt4 book ai didi

android - 如何等到监听器完成执行

转载 作者:行者123 更新时间:2023-12-04 23:50:02 26 4
gpt4 key购买 nike

我在这里要做的是将下载 URL 添加到监听器内的 ArrayList 中。然后在添加所有项目后 println ArrayList。但是,由于监听器是以异步方式执行的,因此 println 将始终打印一个空的 ArrayList。所以,我的问题是如何让它同步?这意味着 println 语句打印包含项目的 ArrayList。这是我的代码:

@Synchronized
private fun postOfferNow() {
val storageRef = storge.reference
val images = ArrayList<String>()
for (image in this. takenPicsPaths) {
val file = Uri.fromFile(File(image))
val ref = storageRef.child("Images/$offerOwnerID/${file.lastPathSegment}")
ref.putFile(file).addOnFailureListener {

}.addOnSuccessListener {
ref.downloadUrl.addOnCompleteListener {
val url = it.result
images.add(url.toString()) //here is where I add items to images
}
}
}
println(images)// this will always print "[]"
}

最佳答案

一个简单的解决方案是:
添加 URL 后检查图像 arrayList 大小,如果它与 takePicsPaths 中的项目大小相同,则可以开始打印

但请注意,对于此解决方案,您必须保证所有项目都将成功上传,以便在最后一次上传完成后开始打印。
如果在您的情况下不能保证这一点,则在循环开始之前声明一个等于 0 的整数计数器,在 onSuccess 监听器之后添加 OnFailureListener,并在两个监听器中递增计数器。
现在,无论计数器达到所需计数,开始打印。

在这里我说“无论在哪里”,因为您可能会在失败监听器中达到想要的计数

关于android - 如何等到监听器完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57940657/

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