firebase - Cloud Storage:downloadUrl 类型不匹配:推断类型为 Task但是乌里!预计
问题描述
我刚刚开始使用 Kotlin 学习 android 开发。我正在尝试在我的项目中实现 MVVM。
消息:类型不匹配。要求:乌里!找到:任务
我有一个问题:如何在 Url 中投射任务!???
我有视图模型:
class AddVehicleViewModel(private val vehicleRepository: VehicleRepository,
onFailureListener: OnFailureListener): BaseViewModel(onFailureListener) {
private val _mkVehicleCompletedEvent = SingleLiveEvent<Unit>()
val mkVehicleCompletedEvent = _mkVehicleCompletedEvent
val user = vehicleRepository.getUser()
fun mkVehicle(user: User, imageUri: Uri?, auto: String) {
if (imageUri != null) {
vehicleRepository.uploadVehicleImage(user.uid, imageUri).onSuccessTask { downloadUrl ->
Tasks.whenAll(
vehicleRepository.createVehicle(user.uid, mkListVehicle(user, auto, downloadUrl.toString()))
)
}.addOnCompleteListener {
_mkVehicleCompletedEvent.call()
}.addOnFailureListener(onFailureListener)
}
}
private fun mkListVehicle(user: User, auto: String, imageUri: String): DataVehicles {
return DataVehicles(
uid = user.uid,
image = imageUri,
auto = auto,
username = user.username,
city = user.city.toString()
)
}
}
和存储库:
class FirebaseVehicleRepository : VehicleRepository {
override fun uploadVehicleImage(uid: String, imageUri: Uri): Task<Uri> =
task { taskSource ->
storage.child("users").child(uid).child("images")
.child(imageUri.lastPathSegment.toString()).putFile(imageUri).addOnCompleteListener {
if (it.isSuccessful) {
taskSource.setResult(it.result!!.metadata!!.reference!!.downloadUrl)
} else {
taskSource.setException(it.exception!!)
}
}
}
错误在这行代码上闪烁:
taskSource.setResult(it.result!!.metadata!!.reference!!.downloadUrl)
解决方案
您不会将任务投射到 Uri。“属性”downloadUrl
实际上是一个名为getDownloadUrl()的异步 Java 方法,它返回一个任务。您需要使用将侦听器附加到任务来获取 Uri,就像您在调用 时所做的那样putFile()
,它也返回一个任务。
使用文档中显示的模式:
storageRef.child("users/me/profile.png").downloadUrl.addOnSuccessListener {
// Got the download URL for 'users/me/profile.png'
}.addOnFailureListener {
// Handle any errors
}
对于您的情况,请使用it.result!!.metadata!!.reference!!.downloadUrl.addOnSuccessListener
...
另请参阅 java 语言等效项:如何从 Firebase 存储 getDownloadURL 获取 URL
推荐阅读
- scala - 如何让对象用泛型扩展抽象类
- node.js - 更新 mongodb 文档会插入另一个新文档
- java - 公共函数不返回值
- git - git - 不要推送从本地分支合并的提交
- asp.net-mvc - 通过 JavaScript 附加 Html 时未定义的波斯文本
- c# - 从 Angular 应用程序将特殊字符发布到 Web API
- python - 给定使用python的约束,如何将N个数字列表更改为N+1个数字列表
- edx - [course-discovery] 存储库已签出错误
- hive - Hive 连接是否接受相等运算符,例如小于符号
- sql-server - 当我通过 VBA 将空日期时间值传递给 sqlserver 时出现异常