我正在将多张图片上传到 Firebase 并已完成,但我无法将 url 链接保存到列表中

Posted

技术标签:

【中文标题】我正在将多张图片上传到 Firebase 并已完成,但我无法将 url 链接保存到列表中【英文标题】:I'm uploading multiple images to Firebase and it's completed, but I can't save the url link to a list 【发布时间】:2021-12-15 00:01:56 【问题描述】:

我正在将多张图片上传到 Firebase 并且已完成,但我无法将 URL 链接保存到列表中。

private fun uploadAllImage(imageList: MutableList<Uri>) 
    val storageReference = FirebaseStorage.getInstance().reference.child("image")
    val storeImage = mutableListOf<Uri>()

    for (i in imageList) 

        val indImg = i
        var imageName = storageReference.child("Image" + indImg.lastPathSegment)

        imageName.putFile(indImg).addOnSuccessListener 
            binding.userImage.setImageURI(null)
            imageName.downloadUrl.addOnSuccessListener 
                Log.d("image", it.toString())
                storeImage.add(it)
            
        
    

    Log.d("imageList", storeImage.size.toString())

【问题讨论】:

你能看到 logcat 中打印的日志消息吗? 【参考方案1】:

尝试像这样完整的侦听器回调

imageName.putFile(indImg).addOnCompleteListener  task ->
    if (task.isSuccessful) 
        val downloadUrl = task.result.toString()
    

【讨论】:

【参考方案2】:

当你调用.putFile()方法时,意味着你正在执行一个异步操作。请记住,将文件实际上传到 Firebase 存储需要时间。因此,任何需要处理与该操作相关的数据的代码都需要添加到onSuccess() 方法中,或者从那里调用。所以你必须移动以下代码行:

Log.d("imageList", storeImage.size.toString())

在回调内部,真正知道单次上传何时完成。

但是,当您并行添加多个文件时,您永远不会知道所有上传何时完成,除非您一个接一个地执行上传操作。这可以使用递归(调用自身的函数)来完成。所以请尝试使用我在以下帖子中的回答:

how do I upload multiple files to firebase databse in order as in arraylist?

它是 Java 代码,但可以非常简单地转换为 Kotlin。

【讨论】:

嘿易卜拉欣。我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!

以上是关于我正在将多张图片上传到 Firebase 并已完成,但我无法将 url 链接保存到列表中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Firebase 同时上传多张图片

使用flutter将多张图片上传到firestore并获取它的下载URL并将所有URL保存到firebase

Flutter 无法上传从 multi_image_picker 获取的多张图片

React Native Firebase 多张图片上传问题

Firebase 上传多个 Storage/Firestore

Flutter Firebase 上传多张图片