我想上传多个图像到Firebase存储并获得每个图像的URL。我用任务来做这个。到目前为止,一切正常。但是,当forEach任务完成时,如何才能读取带有url的列表呢?目前的情况是,列表只在日志中输出,它是空的,然后跳转到forEach:
Tasks.whenAllSuccess<UploadTask>(tasks).addOnSuccessListener {
val downloadUrls = mutableListOf<String>()
tasks.forEach {
it.result.metadata!!.reference!!.downloadUrl.addOnSuccessListener { snap->
downloadUrls.add(snap.toString())
Log.e("Downloadable Image URL",snap.toString())
}
}
//The list here is empty
Log.d("List with URLs",downloadUrls.toString())
progressDialog.dismiss()
}
当你打电话的时候:
Log.d("List with URLs",downloadUrls.toString())
向Storage添加文件的操作尚未完成。这就是你得到一个空列表的原因。如果希望查看downloadUrls
列表的内容,则必须仅在操作100%完成时使用该日志语句。现在,由于您正在使用Kotlin,我建议您使用Kotlin Coroutines。所以你的代码可以写得像这样简单:
val downloadUrls = mutableListOf<String>()
val listOfTasks = Tasks.whenAllSuccess<UploadTask>(tasks).await()
listOfTasks.forEach {
val downloadUrl = it.result.metadata!!.reference!!.downloadUrl.await()
downloadUrls.add(downloadUrl)
}
Log.d("List with URLs",downloadUrls.toString())