我在这里尝试做的是将下载 URL 添加到侦听器内的 ArrayList。添加完所有项目后,再打印 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 "[]"
}
Run Code Online (Sandbox Code Playgroud)
小智 1
一个简单的解决方案是:在添加 URL 后检查图像 arrayList 的大小,如果它与 takePicsPaths 中的项目大小相同,则可以开始打印
但请注意,对于此解决方案,您必须保证所有项目都成功上传,以便在上次上传完成后开始打印。如果在您的情况下不能保证这一点,请在循环开始之前声明一个等于 0 的整数计数器,在 onSuccess 侦听器之后添加 OnFailureListener,并在两个侦听器中递增计数器。现在,只要计数器达到所需计数,就开始打印。
在这里我说“无论哪里”因为你可能会达到失败侦听器中的所需计数
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |