使用Transformations.switchMap时如何解决“必需的MutableLiveData <string>但'SwitchMap'被推断为LiveData <y>”的问题?

时间:2018-12-27 04:29:15

标签: android android-livedata switchmap

我试图将ViewModel与一些LiveData一起使用,该LiveData使用另一个LiveData中的值。

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

  

不兼容的类型。必需的MutableLiveData,但需要'switchMap'   被推断为LiveData:没有类型为Y的实例   存在,以便LiveData符合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的值,但是我做不到。

1 个答案:

答案 0 :(得分:1)

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

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

选中reference