为什么变量dowloadUrl在saveProfile方法中返回null?

时间:2019-10-25 07:07:05

标签: kotlin

以下代码显示了我用于获取变量downloadUrl的firebase存储上载任务,因为downloadUrl在日志中打印,所以downloadUrl不为null,但是当我调用函数saveProfile时,它返回null,为什么?

var downloadUrl: String? = null

fun upload(bytes: ByteArray) {

    val storageReference = FirebaseStorage.getInstance().reference
        .child(
            "images/users/${FirebaseAuth.getInstance().currentUser!!.uid}/profile_image"
        )

    val metadata = StorageMetadata.Builder()
        .setContentType("image/jpg")
        .setContentLanguage("en")
        .build()

    storageReference.putBytes(bytes, metadata).addOnSuccessListener {

        model.listener!!.progressBarGone()
        model.listener!!.toast("Uploaded Successfully")

        val urlTask = it.storage.downloadUrl
        while (!urlTask.isSuccessful);
        this.downloadUrl = urlTask.result.toString()

        Log.d("Upload", "DownloadUrl $downloadUrl")

这是saveProfile函数。

fun saveProfile() {

    val user = User()

    if (model.name.isNullOrEmpty() || model.phone.isNullOrEmpty()) {
        model.listener!!.toast("Fields cannot be empty")
        return
    }
    if (downloadUrl.isNullorEmpty()) {

       log.d(TAG, "URL empty")

    }

    user.name = model.name
    user.phone = model.phone
    user.profile_image = downloadUrl

1 个答案:

答案 0 :(得分:0)

致电时

this.downloadUrl = urlTask.result.toString()

您将downloadUrl分配给与传递给addOnSuccessListener的lambda绑定的对象,而不是全局downloadUrl。为了快速解决,我建议您将全局downloadUrl重命名为其他名称(不会被遮盖)。