Firebase Storage OnFailure 不适用于 await。为什么?

Firebase Storage OnFailure Not Working with await. why?

提问人:Edip C. 提问时间:9/24/2023 最后编辑:Edip C. 更新时间:10/19/2023 访问量:28

问:

我使用firebase存储来下载文件,如下所示。 在 succsess 上工作并下载数据。但是当出现错误时,onFailurelistener 不起作用。例如,如果我写错了文件路径,则不会发生任何事情,我的应用程序会冻结。如何使 onfailure 起作用。


suspend fun readFireBaseFile(context: Context): String {
    var data: String = "will come from firebase"

   
        val maxBytes = 3 * 1024 * 1024L 

        Firebase.initialize(context)
        val ref = Firebase.storage.reference.child("/files/myFile.json")
        
        val mytask = ref.getBytes(maxBytes)
        
        mytask.addOnFailureListener() {
            
            println("ERROR")    // not working !!!!!!!!!!!!!!
        }
        
        mytask.addOnSuccessListener {
            println("SUCCSESS")  // Working
        }
        val byteData = mytask.await()
        data = String(byteData)
    
    return data
}

我想处理错误,豁免......

Android Kotlin 错误处理 任务 firebase-storage

评论

0赞 Doug Stevenson 9/24/2023
如果你的代码冻结了,你应该做一些调试,找出是哪一行代码导致了这种情况,并更新你的问题,以更具体地解释什么没有按照你预期的方式工作。

答:

0赞 Rosário Pereira Fernandes 10/19/2023 #1

使用时,您不再需要手动添加这些侦听器,因为该函数会抛出异常。所以你的代码是:await()catch

suspend fun readFireBaseFile(context: Context): String {
    var data: String = "will come from firebase"

   
        val maxBytes = 3 * 1024 * 1024L 

        Firebase.initialize(context)
        val ref = Firebase.storage.reference.child("/files/myFile.json")
        
        val mytask = ref.getBytes(maxBytes)
        
        try {
            val byteData = mytask.await()            
            println("SUCCSESS")
            data = String(byteData)
        } catch (e: Exception) {
            println("ERROR")
        }
    
    return data
}