Как исправить «Обязательные MutableLiveData <String>, но« SwitchMap »был выведен в LiveData <Y>» при использовании Transformations.switchMap? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь использовать ViewModel с некоторыми 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 голосов
/ 27 декабря 2018

Как правило, Transformations.switchMap возвращает LiveData, в то время как тип вашего приемника MutableLiveData.рассмотрите возможность изменения, как показано ниже:

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

Проверьте ссылка .

...