【问题标题】:Return data in UploadTask onSuccessListener在 UploadTask onSuccessListener 中返回数据
【发布时间】:2018-12-21 01:08:20
【问题描述】:

我正在尝试将多个文件上传到 Firebase,并希望在所有上传任务完成后将其链接到另一个孩子。为了实现这一点,我试图在 kotlin 中使用协程。以下是代码(如果我错了,请纠正我,因为我在协程方面真的很糟糕):

fun create(placemark: PlacemarkModel,callback: () -> Unit=fun(){})=runBlocking {
    val key = db.child("users").child(userId).child("placemarks").push().key
    placemark.id = key!!
    placemarks.add(placemark)
db.child("users").child(userId).child("placemarks").child(key).setValue(placemark)            
    uploadImage(placemark.dp,"dp",placemark)
    if (placemark.images.size>0){
      placemark.images.forEach{
      uploadImage(it,"images",placemark,placemark.images.indexOf(it))
    }
}

这是我的 uploadImage 函数,我打算等到它完成运行并将 URI 传递回主函数

suspend fun uploadImage(image:String,
             type:String,
             placemark: PlacemarkModel,
             index:Int=0,
             callback:()->Unit=fun(){}):URI{
    st = FirebaseStorage.getInstance().reference
    info("Coroutines 2")
    val imageRef = st?.child(userId + '/' + File(image).name)
    val data=readAndCompress(image)
    data?.let {
    var uploadTask=imageRef?.putBytes(data)
    uploadTask?.addOnFailureListener {
      println(it.message)
    }?.addOnSuccessListener { taskSnapshot ->
      //I want to return the URI here however return is not allowed
    }
  }
}

感谢您的宝贵时间。

【问题讨论】:

  • 我不熟悉 Kotlin,但是在 Java 中,当我需要根据上传到 Firebase 的图像数量运行某些东西时,我在 for 循环中放置了一个检查器以获取图像索引。例如。 for( int i=0; i
  • 我认为这行不通。我需要将上传的文件链接到我的孩子,这种方法不会等到文件完全上传。因此我的孩子不会参考图片
  • 我希望使用 addOnCompleteListener 上传会很明显。我只是回答问题的 te 数组索引部分。您可以让 addOnCompleteListener / addOnSuccessListener 在 Firebase 中上传任务,这样您就可以在上传完成/成功时实现您的逻辑
  • 也许使用 forEach 会让这变得不那么明显。无论哪种方式,如果遇到任何障碍,请告诉我

标签: android firebase kotlin firebase-storage


【解决方案1】:

事实证明,我可以将所有任务添加到任务列表中并调用

Tasks.whenAllSuccess(tasks).addCompleteListener{ //这里回调 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多