【问题标题】:Function starts before another finished功能在另一个完成之前开始
【发布时间】:2020-04-17 21:21:03
【问题描述】:

``我的问题是我的 elaniekle 函数在 storagew 函数结束之前启动。所以 mydownloadurl 在数据库中似乎为空,我该如何解决?谢谢。

enter code here     ekle.setOnClickListener {
            storage2()
            elaniekle()
    }


        fun storage2() {
        var uuid = UUID.randomUUID()
        var ref = storage.reference
        var imagename = "$uuid.jpg"
        var imagesReference = ref.child("images").child(imagename)
        imagesReference.putFile(imagelist[0]).addOnSuccessListener { taskSnapshot ->
            var deyisen =** FirebaseStorage.getInstance().reference.child("images").child(imagename)
            deyisen.downloadUrl.addOnSuccessListener { uri ->
               mydownloadurl =  uri
            }
        }
    }
    fun elaniekle(){
            var sikmap= hashMapOf<String,Any>()
            sikmap.put("Email",auth.currentUser!!.email.toString())
            uniqueid = db.collection("Posts").document().id
            sikmap.put("uniqueid",uniqueid.toString())
            sikmap.put("qapaqsekli",mydownloadurl.toString())
            db.collection("Posts").add(sikmap)
    }

【问题讨论】:

  • 把你的代码贴在你调用这两个函数的地方
  • putFile 是异步的,在上传完成之前立即返回。您附加到它返回的 Task 的侦听器会在上传完成后的一段时间后调用。您的代码会继续执行,直到发生这种情况,因此您不应事先依赖其结果。
  • 您能解释一下我的代码的哪些部分需要更改吗?

标签: android firebase kotlin firebase-storage


【解决方案1】:

您必须等待回调完成:

ekle.setOnClickListener {
    storage2()
}


    fun storage2() {
    var uuid = UUID.randomUUID()
    var ref = storage.reference
    var imagename = "$uuid.jpg"
    var imagesReference = ref.child("images").child(imagename)
    imagesReference.putFile(imagelist[0]).addOnSuccessListener { taskSnapshot ->
        var deyisen =** FirebaseStorage.getInstance().reference.child("images").child(imagename)
        deyisen.downloadUrl.addOnSuccessListener { uri ->
           mydownloadurl =  uri
           elaniekle()
        }
    }
}

fun elaniekle(){
        var sikmap= hashMapOf<String,Any>()
        sikmap.put("Email",auth.currentUser!!.email.toString())
        uniqueid = db.collection("Posts").document().id
        sikmap.put("uniqueid",uniqueid.toString())
        sikmap.put("qapaqsekli",mydownloadurl.toString())
        db.collection("Posts").add(sikmap)
}

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 2020-06-18
    • 1970-01-01
    • 2011-11-28
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多