Firebase 存储的 OnSuccessListener 回调未调用

Posted

技术标签:

【中文标题】Firebase 存储的 OnSuccessListener 回调未调用【英文标题】:Firebase Storage's OnSuccessListener callback not calling 【发布时间】:2017-11-03 04:45:26 【问题描述】:

通过 Firebase 存储上传文件时,不会调用 onSuccess 方法。

我目前正在运行带有“com.google.firebase:firebase-storage:10.2.6”的 android Studio 3.0 Canary 2。

fun uploadImage(pathToImage: String, downloadCallback: FirebaseCallback<String?>) 
        val file = Uri.fromFile(File(pathToImage))
        val ref = mStorRef.child("images/"+file.lastPathSegment)

        ref.putFile(file).addOnSuccessListener 
            object : OnSuccessListener<UploadTask.TaskSnapshot> 
                override fun onSuccess(taskSnapshot: UploadTask.TaskSnapshot?) 
                    val url = taskSnapshot?.downloadUrl
                    Log.d("FirebaseManager", "Upload Successful")
                    downloadCallback.callback(url.toString())
                
            
        
    

【问题讨论】:

【参考方案1】:

通过使用,您通过SAM conversion 传入一个lambda 作为侦听器。在这个 lambda 中,您正在定义成功时应该发生的事情:您正在创建一个从未使用过的 object。要将object 作为监听器传入,请使用()

ref.putFile(file).addOnSuccessListener (
    object : OnSuccessListener<UploadTask.TaskSnapshot> 
        override fun onSuccess(taskSnapshot: UploadTask.TaskSnapshot?) 
            val url = taskSnapshot?.downloadUrl
            Log.d("FirebaseManager", "Upload Successful")
            downloadCallback.callback(url.toString())
        
    
)

或者只进行 SAM 转换,而不显式创建 object

ref.putFile(file).addOnSuccessListener  taskSnapshot ->
    val url = taskSnapshot?.downloadUrl
    Log.d("FirebaseManager", "Upload Successful")
    downloadCallback.callback(url.toString())

【讨论】:

以上是关于Firebase 存储的 OnSuccessListener 回调未调用的主要内容,如果未能解决你的问题,请参考以下文章

所有存储桶的 Firebase 存储安全规则

如何更改默认的 Firebase 存储桶?

读取 Firebase 存储映像安全规则

Firebase 存储 - 将图像上传到 Firebase 存储并在实时数据库中创建指向该图像的链接

Firebase 存储视频流

将 Firebase 存储下载 URL 推送到 Firebase 云 Firestore