Почему переменная dowloadUrl возвращает нуль в методе saveProfile? - PullRequest
0 голосов
/ 25 октября 2019

В следующем коде показана задача загрузки хранилища 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 голосов
/ 25 октября 2019

Когда вы вызываете

this.downloadUrl = urlTask.result.toString()

Вы присваиваете downloadUrl объекту, который привязан к лямбде, который вы передаете addOnSuccessListener, а не к глобальному downloadUrl. Для быстрого исправления я бы предложил переименовать глобальное downloadUrl в другое имя, которое не будет скрыто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...