我在Android应用中使用WorkManager。 我已经设置了一个工作请求,并在其doWork()方法中将文件上传到Firebase Storage。 我想将此工作请求与另一个请求链接在一起,但是我需要在下一个请求开始之前(在我返回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()
}
}
答案 0 :(得分:0)
只需拿起uploadTask
并使用Tasks.await()
我不知道确切的语法,但是它是这样的
override fun doWork(): Result{
.....
val uploadTask = fileRef.putBytes(file)
val taskResult = Tasks.await(uploadTask)
downloadFileUrl = taskResult.result.toString()
....
return Result.success()
}