Но обратный вызов Transformations.map не запускается без наблюдателя.
Это нормально, без вызова метода ObserverForever () LiveData, возвращаемого Transformations.map (), никто не можетПредложите данные, которые в нем хранятся.
Так что это хороший способ вызвать Наблюдение за {{} при использовании живых данных, возвращаемых Tranformations.map?
Просмотр того, что вы делаете в этомМетод, ответ нет, это не то, как вы используете Transformations.map ().Цель этого метода - применить некоторые изменения к значениям, исходящим от исходного LiveData, до того, как эти значения будут представлены наблюдателю.В вашем случае вам нужно простое изменение типа (от dataResult.data до TopRatedMoviesResponse), а также запуск некоторой ошибки LiveDatas, когда что-то пошло не так.Проверьте приведенный ниже код:
fun getAppConfiguration(): MutableLiveData<TopRatedMoviesResponse> {
progressDialogVisibleLiveData.postValue(true)
val appConfigurationSourceLiveData : MutableLiveData<DataResult> = splashScreenRepository.getAppConfiguration(getApplication())
return Transformations.map(appConfigurationSourceLiveData) { dataResult ->
progressDialogVisibleLiveData.postValue(false)
when (dataResult) {
is DataResultSuccess -> {
dataResult.data as TopRatedMoviesResponse
}
is DataResultFailed -> {
when (dataResult.errorCode) {
HTTPError.UNAUTHORISED -> {
unAuthorisedEventLiveData.postValue(true)
}
HTTPError.FORBIDDEN, HTTPError.NOT_FOUND, HTTPError.INTERNAL_SERVER_ERROR, HTTPError.UNKNOWN, HTTPError.NO_INTERNET, HTTPError.BAD_REQUEST -> {
errorDialogVisibleLiveData.postValue(dataResult)
}
}
// we have to return something even if an error occured
// I'm returning null, your UI should handle this
null
}
}
}
}
Также ознакомьтесь с руководством по архитектуре , чтобы найти альтернативные способы обработки данных и ошибок с помощью LiveData.