Firebase Storage onSuccess вызывается до завершения загрузки - PullRequest
0 голосов
/ 13 мая 2018

Я использую хранилище Firebase для сохранения фотографий.Но мой onSuccess вызывается до завершения загрузки

Ошибка:

 java.lang.IllegalStateException: Task is not yet complete
        at com.google.android.gms.common.internal.Preconditions.checkState(Unknown Source)
        at com.google.android.gms.tasks.zzu.zzdq(Unknown Source)
        at com.google.android.gms.tasks.zzu.getResult(Unknown Source)
        at in.sekreative.sekreative.ui.auth.AuthActivity$uploadPhotoAndRegister$2.onSuccess(AuthActivity.kt:133)
        at in.sekreative.sekreative.ui.auth.AuthActivity$uploadPhotoAndRegister$2.onSuccess(AuthActivity.kt:24)
        at com.google.firebase.storage.zzj.zza(Unknown Source)
        at com.google.firebase.storage.zzaa.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6123)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

Код

val storage = FirebaseStorage.getInstance().reference
storage.child("images/profile/${mAuth.currentUser?.uid}.jpg").putBytes(data)
        .addOnProgressListener {
            val progress = 100.0 * it.bytesTransferred / it.totalByteCount
            dialog.incrementProgress(progress.toInt())
        }
        .addOnSuccessListener {
            user.profile = it.storage.downloadUrl.result.toString()
            registerDataWithoutPhoto(user)
        }
        .addOnFailureListener {
            toast("Error uploading photo. You can update your profile pic later in the profile section.")
            registerDataWithoutPhoto(user)
        }

Почему слушатель успеха вызывается до того, как задача будет выполнена?

К вашему сведению: несколько раз раньше она работала совершенно нормально.Это была внезапная ошибка.

1 Ответ

0 голосов
/ 13 мая 2018

it.storage.downloadUrl ( javadoc ) возвращает задание, которое выполнено только после того, как доступен URL-адрес для загрузки ссылки.Ваш код не ждет завершения этой задачи.Вместо этого он пытается немедленно получить результат, и этот доступ вызывает исключение.Вместо этого вы должны использовать прослушиватели для этой Задачи, как и для Задачи, возвращаемой putBytes.

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