android - 使用 Transformations.switchMap 时如何修复 "Required MutableLiveData<String> but ' SwitchMap' 被推断为 LiveData<Y>"?

标签 android android-livedata switchmap

我正在尝试将 ViewModel 与某些 LiveData 一起使用,这些 LiveData 使用另一个 LiveData 的值。

为此,我尝试使用 Transformations.switchMap 但我得到了

Incompatible types. Required MutableLiveData but 'switchMap' was inferred to LiveData: no instance(s) of type variable(s) Y exist so that LiveData conforms to MutableLiveData

我已经尝试切换到 Transformations.map,但结果相同。

public class RestaurantViewModel extends ViewModel {

    private MutableLiveData<FirebaseUser> userLiveData  = new MutableLiveData<>();

    private final MutableLiveData<String> userId =
    Transformations.switchMap(userLiveData, input -> {
        return input.getUid();
    });

    private String getUid(FirebaseUser user){
        return user.getUid();
    }

    private void setUser(FirebaseUser currentUser){
        this.userLiveData.setValue(currentUser);}
}

我希望 userId 依赖于 userLiveData 的值,但我做不到。

最佳答案

基本上,当您的接收器类型为 MutableLiveData 时,Transformations.switchMap 返回 LiveData。考虑进行如下更改:

private final LiveData<String> userId = Transformations.switchMap(userLiveData, input -> {
    return input.getUid();
}); // Here we change userId 'MutableLiveData' to 'LiveData'.

检查reference .

关于android - 使用 Transformations.switchMap 时如何修复 "Required MutableLiveData<String> but ' SwitchMap' 被推断为 LiveData<Y>"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53939760/

相关文章:

Android 用 dex 转换类进行调试

android - Intellij Android + Maven 找不到单元测试

android - intel xdk 在后退按钮点击时退出移动应用程序

android - 如何在另一个 ViewModel 中使用来自一个 ViewModel 的数据

rxjs - 如何知道 switchMap 是否取消订阅内部 Observable?

javascript - 使用 switchMap 取消订阅先前的 http 请求并仅获取最新的请求

Android:如何为暗模式切换主题?

android - 奇怪的 AndroidViewModel LiveData 观察者行为

android - LiveData 或 DataBinding 观察者

angular - 如何完成 rxjs switchmap observable?