gpt4 book ai didi

android - 将 LiveData> 转换为 LiveData 时的类型干扰问题

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

我正在尝试合并 Android Architecture GitHub example与数据绑定(bind)。为此,我想我必须在 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)
}
}

但是,出现了2个错误:

1) type inference for control flow expression failed, please specify its type explicitly.

2) Type inference failed: not enough information to infer parameter T in fun create(): LiveData



如果我将代码更改为:
if (userResource == null) {
AbsentLiveData.create<User>()
}

然后 switchMap开始提示:

Type inference failed: Cannot infer type parameter Y in ...



1)为什么这不一样?我根本没想到需要类型定义,因为 <LiveData<Resource<User>>> 的映射以同样的方式正常工作。

2)如何解决错误?

3)这种应用数据绑定(bind)的解决方案可能是错误的方法吗?

The commit with this specific issue on GitHub repo

最佳答案

这对我有用:

        if (userResource == null) {
AbsentLiveData.create<User>()
}
else {
MutableLiveData(userResource.data!!)
}

关于android - 将 LiveData<Resource<User>> 转换为 LiveData<User> 时的类型干扰问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043124/

29 4 0