gpt4 book ai didi

android - 将 Firebase 与 Kotlin 协程一起使用

转载 作者:行者123 更新时间:2023-12-02 12:35:45 25 4
gpt4 key购买 nike

我在我的应用程序中使用 Kotlin 协程,并选择了 firebase 作为我的数据库和存储选择。
在探索了 firebase 之后,我意识到它的所有 API 都是异步的,并且异步调用的结果在回调中返回,摆脱回调是我在我的应用程序中使用 Kotlin 协程的主要原因。

这是我为将文件上传到 Firebase 云存储而编写的代码,但它给出了“任务尚未完成”错误。

private suspend fun saveImage(filePath: String): String? {
val storage = FirebaseStorage.getInstance("gs://myapp-9a648.appspot.com/")
val storageRef = storage.reference
val file = Uri.fromFile(File(filePath))
val imageRef = storageRef.child("images/${file.lastPathSegment}")
return withContext(Dispatchers.IO) {
imageRef.putFile(file).snapshot.storage.downloadUrl.result.toString()
}
}

E/AndroidRuntime: FATAL EXCEPTION: main Process: pk.com.kotlinapp, PID: 7491 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.zzb(Unknown Source) at com.google.android.gms.tasks.zzu.getResult(Unknown Source) at prk.com.kotlinapptest.DatabaseManager$saveImage$2.invokeSuspend(DatabaseManager.kt:28) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594) at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740)



有什么方法可以将文件上传到 Firebase 云存储并取回下载 URL,而无需在其成功回调中获取下载 URL?

最佳答案

kotlinx-coroutines-play-services library提供await允许等待任务完成的扩展函数,例如:

...
dependencies {
...
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.1"
}
return withContext(Dispatchers.IO) {
imageRef
.putFile(file)
.await() // await() instead of snapshot
.storage
.downloadUrl
.await() // await the url
.toString()
}

关于android - 将 Firebase 与 Kotlin 协程一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57562864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com