Я столкнулся с той же проблемой в моей ViewModel.Похоже, что это внутреннее ограничение MediatorLiveData.Если он видит, что добавлен тот же тип LiveData, ему нужно, чтобы с ним работал тот же слушатель.Я просто добавлю свой случай, как это было с тем же типом ошибки и после (без ошибок, работает нормально).Код с ошибкой:
networkSum = new MediatorLiveData<>();
networkSum.addSource(firstData, integer -> {
if (integer == null) {
firstIsFinished = false;
errorInFirst = false;
} else if (integer == SupportNetworkFunctions.STATUS_IN_PROGRESS) {
networkSum.postValue(integer);
firstIsFinished = false;
} else if (integer == SupportNetworkFunctions.STATUS_FINISHED_WITH_ERROR) {
firstIsFinished = true;
errorInFirst = true;
calculateFinished();
} else {
firstIsFinished = false;
errorInFirst = false;
calculateFinished();
}
});
networkSum.addSource(secondData, integer -> {
if (integer == null) {
secondIsFinished = false;
errorInSecond = false;
} else if (integer == SupportNetworkFunctions.STATUS_IN_PROGRESS) {
networkSum.postValue(integer);
secondIsFinished = false;
} else if (integer == SupportNetworkFunctions.STATUS_FINISHED_WITH_ERROR) {
secondIsFinished = true;
errorInSecond = true;
calculateFinished();
} else {
secondIsFinished = false;
errorInSecond = false;
calculateFinished();
}
});
После рефакторинга:
networkSum = new MediatorLiveData<>();
Observer<Integer> statusObserver = new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer != null) {
if (integer == SupportNetworkFunctions.STATUS_IN_PROGRESS) {
networkSum.postValue(integer);
} else if (integer == SupportNetworkFunctions.STATUS_FINISHED_WITH_ERROR) {
finishedItems++;
errorAppeared = true;
calculateFinished();
} else {
finishedItems++;
calculateFinished();
}
}
}
};
networkSum.addSource(firstData, statusObserver);
networkSum.addSource(secondData, statusObserver);