Итак, давайте сделаем это по частям:
Теперь с каждым методом я возвращаю некоторые данные типа LiveData, но во время возврата данных значение не устанавливается.Я устанавливаю его через 5 секунд data.setValue ("SomeValue"), так что толку от возврата здесь, это только из-за типа возврата метода, и ничего не делает в случае LiveData
Есливы проверите docs и увидите, что LiveData "является наблюдаемым классом держателя данных", поэтому он хранит данные, и вы можете наблюдать их.Это очень важно понять, почему вы возвращаете этот объект LiveData здесь.Возвращая его, вы сообщаете следующему слою вашей архитектуры (ViewModel): «Эй, вот этот держатель, я в какой-то момент положу здесь некоторые данные, поэтому наблюдатель , если вы хотите получитьданные".
ViewModel не наблюдает за этим, а просто передает его следующему объекту, заинтересованному в этом держателе данных, пользовательскому интерфейсу (LifeCycleOwner
).Таким образом, в владельце вы начинаете наблюдать за этим «держателем данных» и будете предупреждены, когда поступят новые данные.
В MainActivity я использовал homeViewModel.getResponseval (). Наблюдаю за данными наблюдателя, но вViewModel, я не использовал наблюдение, но ViewModel все еще наблюдает за репозиторием, и через 5 секунд MainActivity получает результат.Я не могу понять, что здесь происходит.
Вам необходим LifeCycleOwner
, чтобы наблюдать обновления от LiveData
, также из документов: "LiveData
считает наблюдателя, который являетсяпредставленный классом Observer, чтобы быть в активном состоянии, если его жизненный цикл находится в состоянии STARTED или RESUMED. LiveData только уведомляет активных наблюдателей об обновлениях. "Для определения состояния требуется LifeCycleOwner
, поэтому, когда у вас есть метод observe
, вы передаете this
в качестве параметра.И именно поэтому вы не использовали observe
в ViewModel
.