【发布时间】:2020-10-30 19:58:54
【问题描述】:
我在我的 Android 应用程序中使用 WorkManager。 我已经设置了一个工作请求,并在其 doWork() 方法中将文件上传到 Firebase 存储。 我想将此工作请求与另一个链接,但我需要在下一个请求开始之前(在我返回 Result.success 之前)完成上传(以获取下载 URL)。 我怎样才能完成这项工作? 我可以在 doWork() 方法中使用 LiveData 吗? 如何在返回工作结果之前等待回调?
*顺便说一句,我试图避免多余的 firebase 调用,因此写入数据库,然后使用我获得的 URL 更新数据库的选项对我不起作用。
代码:
class UploadWorker(context: Context, workerParams: WorkerParameters): Worker(context,workerParams)
{
override fun doWork(): Result
{
//get input
...
//store file in Firebase
val storage = FirebaseStorage.getInstance()
val storageRef = storage.reference
val fileRef = storageRef.child(filePath.toString())
val uploadTask = fileRef.putBytes(file)
var downloadFileUrl: String? = ""
uploadTask.continueWithTask { task ->
if (!task.isSuccessful)
{
task.exception?.let { throw it }
}
fileRef.downloadUrl
}.addOnCompleteListener { task ->
if (task.isSuccessful)
{
//this is what I want to save before the return of doWork()
downloadFileUrl = task.result.toString()
}
else
{
// Handle failures
Log.d("fb", "fail")
}
}
return Result.success()
}
}
【问题讨论】:
-
是的,我了解如何实现链接部分,问题是在继续之前等待回调
-
您可以使用
com.google.android.gms.tasks.Tasks.await(task)删除回调并将其视为同步调用 -
你能不能说的更具体一些或者举个例子?
标签: android firebase firebase-storage android-workmanager