Сначала убедитесь, что ваша активность отслеживает settingsViewModel.userApplicationSettings
и вызывает loadApplicationSettings()
.
Если предположить, что оставшаяся часть реализации работает правильно, все, что вам нужно сделать в SettingsData
, это вернуть вызов от ApiBaseProvider().create().getApplicationSettings()
поскольку он возвращает LiveData на основе реализации LiveDataCallAdapter
:
class SettingsData {
fun getUserApplicationSettings(): LiveData<UserApplicationSettings> =
ApiBaseProvider().create().getApplicationSettings()
}
Следовательно, Observer<UserApplicationSettings>
от действия будет уведомлено, поскольку вы уже подписаны на него.
Также, если вы беретевзгляд на LiveDataCallAdapter
:
call.enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
println("testing response: " + response.body())
postValue(ApiResponse.create(response))
}
override fun onFailure(call: Call<T>, throwable: Throwable) {
postValue(ApiResponse.create(throwable))
}
})
Вы можете видеть, что адаптер отправляет сообщение об успехе и неудаче тому, кто его слушает.
После внимательного изучения LiveDataCallAdapter
на return object : LiveData<ApiResponse<T>>() { override fun onActive() {
onActive вызывается только тогда, когда число активных наблюдателей изменяется с 1 на 0.
Я выбрал LiveDataCallAdapter.kt из googlesamples и заметил использование private var started = AtomicBoolean(false)
и if (started.compareAndSet(false, true))
, которые здесь не реализуются, поэтому я полагаю, что это активирует Livedata.onActive
для запуска.
Вы также можете попробовать добавить это к своей логике, и если вы хотите узнать больше об AtomicBooleвзглянуть на AtomicBoolean.compareAndSet (! флаг, флаг)?
Вы также можете проверить LiveData # onactive .