【问题标题】:How to change maxUploadRetryTimeMillis from Firebase Storage Instance in Kotlin?如何从 Kotlin 的 Firebase 存储实例更改 maxUploadRetryTimeMillis?
【发布时间】:2019-10-19 05:13:28
【问题描述】:

当我的 Android 设备没有任何网络连接时,我的 FailureListener 仅在 10 分钟后触发,就像我尝试将图片上传到我的 Firebase 存储时所指定的那样。

我想使用 maxUploadRetryTimeMillis 属性将其更改为大约 10 秒。但这并不像预期的那样工作。

到目前为止我的简化代码:

object StorageUtil {
    private val storageInstance: FirebaseStorage by lazy { FirebaseStorage.getInstance() }

    private val currentUserRef: StorageReference
        get() = storageInstance.reference
            .child(FirebaseAuth.getInstance().uid ?: throw NullPointerException("UID is null."))

    fun uploadPicture(imageBytes: ByteArray,
                      onSuccess: (imagePath: String) -> Unit) {
        storageInstance.maxUploadRetryTimeMillis = 10000
        val ref = currentUserRef.child("pictures/${UUID.nameUUIDFromBytes(imageBytes)}")

        val uploadTask = ref.putBytes(imageBytes)

        uploadTask.addOnFailureListener {
            Log.i("Upload Failed", "This message never shows up")
        }
    }

uploadPicture() 被这样调用:

StorageUtil.uploadPicture(picture) { url ->
                    moment.phtotoPaths.add(url)
                    renderImages()
}

这不起作用。它仍然会在 10 分钟后触发 FailureListener

希望我能得到你的帮助。提前致谢!

【问题讨论】:

    标签: android firebase kotlin firebase-storage


    【解决方案1】:

    我发现你也改了maxDownloadRetryTimeMills

    特别是如果设备在上传开始时已经离线。因为它会尝试获取一个上传 URL,该 URL 显然算作下载。

    【讨论】:

      【解决方案2】:

      无法使用 SDK 配置任何超时。原因是当网络连接不好时,SDK 会静默地持续重试并恢复上传。这对于移动应用来说是一个非常好的功能。

      如果您需要在一段时间后继续执行其他工作,您需要设置自己的计时器并在您指定的超时时间触发。然后,您可以取消上传并执行您需要执行的任何操作来恢复。

      【讨论】:

      • 我的计划是检查这种方式是否可以上传,主要是由于网络超时。如果不是,我会将我的状态保存到本地数据库,并在连接再次可用时尽快重试上传。我从这里引用我的想法:stackoverflow.com/questions/42495696/… 和这里:firebase.google.com/docs/reference/android/com/google/firebase/…
      • 是的,你绝对应该保存状态。不知道需要多长时间,也不知道最终是否会成功。
      • 但是如果只有在我的上传初始以网络连接开始时才可以使用SessionURI 保存状态(请参见此处:stackoverflow.com/questions/38822982/…)并且如果我从 Android 检查一般的网络连接,我只会检查如果 Firebase 服务可用或不可用,则网络不可用。我该怎么办?
      • 这不是它的工作原理。您只需启动上传并假设它最终会在有连接时工作。您不能“检查连接”,因为这仍然不能保证应用永远能够连接,或者 需要多长时间,或者 如果现在开始上传就可以完成了。
      • 为什么这么多线程只是简单地建议在开始任何网络任务之前通过 ping 调用来测试互联网连接,例如 google.com?这是不好的做法吗?我假设如果我可以在合理的响应时间内 ping google.com,我也应该能够在标准的 10 分钟内将
      猜你喜欢
      • 2022-01-17
      • 2022-08-03
      • 2018-03-01
      • 2017-10-05
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2023-02-25
      相关资源
      最近更新 更多