如何在Android中使用WorkManager从Firebase存储下载文件

我正在尝试每2小时使用WorkManager从Firebase Storage下载一个zip文件。 以下是dowork函数。

override fun doWork(): Result {
    val storage = FirebaseStorage.getInstance()
    val storageRef = storage.reference
    val pathReference = storageRef.child("customerdata.zip")

    Log.v("SysLog","File download starting...") // This log can be seen in Logcat

    val localFile = File.createTempFile("customerdata",".zip")

    pathReference.getFile(localFile).addOnSuccessListener {
        Log.v("SysLog","File downloaded successfully")
    }.addOnFailureListener {
        Log.v("SysLog","File download failed with error: ${it.localizedMessage}")
    }

    return Result.success()
}

调用dowork的方法没有任何问题。但是addOnSuccessListener从未被调用。大约10分钟后,addOnFailureListener被调用并显示错误消息

  

已超过操作重试限制

仅当应用程序最小化并且手机屏幕关闭时,才会出现此问题。否则,整个工作就可以了。

我在这里做什么错了?

taisen518 回答:如何在Android中使用WorkManager从Firebase存储下载文件

getFile()是异步的,并且总是立即返回。下载完成后,将在一段时间后调用附加到它返回的Task的回调。这意味着您的doWork函数始终立即返回Result.success(),无论下载如何进行。这不是您想要的-您的函数应该仅在下载完成后 后返回结果。

您将需要:

  1. 进行此功能块,直到下载完成。
  2. 使用WorkManager工人的异步版本返回工作完成时触发的ListenableFuture。
本文链接:https://www.f2er.com/3073535.html

大家都在问