我正在尝试将Android Architecture GitHub example与数据绑定结合在一起。为此,我认为我必须在UserViewModel中添加从LiveData>到LiveData的附加转换:
val userResourceLiveData: LiveData<Resource<User>> = Transformations.switchMap(_login) { login ->
if (login == null) {
AbsentLiveData.create()
}
else {
repository.loadUser(login)
}
}
val userLiveData: LiveData<User> = Transformations.switchMap(userResourceLiveData) { userResource ->
if (userResource == null) { // Error 1 on 'if'
AbsentLiveData.create() // Error 2 on 'create()'
}
else {
MutableLiveData(userResource.data)
}
}
但是,出现两个错误:
1)控制流表达式的类型推断失败,请明确指定其类型。
2)类型推断失败:没有足够的信息来推断有趣的create()中的参数T:LiveData
如果我将代码更改为此:
if (userResource == null) {
AbsentLiveData.create<User>()
}
然后switchMap
开始抱怨:
类型推断失败:无法在...中推断类型参数Y
1)为什么这样不起作用?我没想到根本不需要类型定义,因为<LiveData<Resource<User>>>
的映射以相同的方式正常工作。
2)如何解决错误?
3)可能将这种解决方案应用于数据绑定是一种错误的方法吗?
答案 0 :(得分:1)
这对我有用:
if (userResource == null) {
AbsentLiveData.create<User>()
}
else {
MutableLiveData(userResource.data!!)
}