У меня проблема с MediatorLiveData. Я хочу получить данные из базы данных в классе, который не является ViewModel. Я хотел бы указать, что методы, которые загружают данные, работают в ViewModel, но когда я хочу вызвать их в другом классе, они не работают. Это код:
class MyReceiver: BroadcastReceiver() {
@Inject
lateinit var jobsRepository: jobsRepository
private val _jobStatusDone = MediatorLiveData<Boolean>()
val jobStatusDone: LiveData<Boolean>
get() = _jobStatusDone
private val _counterparties = MediatorLiveData<List<Counterparty>>()
override fun onReceive(context: Context?, intent: Intent?) {
AndroidInjection.inject(this, context)
val source = jobsRepository.getFulljobs()
_jobStatusDone.addSource(source) {
System.out.println("IT NEVER REACHES THIS PLACE.")
}
}
}
}
Это интересно, потому что обновление/вставка работает.
Обновлено: я хотел бы указать, что код, который я разместил здесь, работает в классах ViewModel.
Я не уверен в версии Kotlin для реализации MediatorLiveData, но в версии Java вам нужно будет реализовать onChanged() для получения данных. Вы можете сослаться на эту тему. Надеюсь это поможет !
https://stackoverflow.com/a/44471378/1992013
"вам нужно будет реализовать onChanged()" - это внутри (source) { // lambda }
Я не уверен, почему вы должны использовать MediatorLiveData в других местах. На самом деле вы можете использовать MutableLiveData и наблюдать за ним, где хотите.
Проверьте мою реализацию MVVM, чтобы увидеть, как она работает.
конечно, эта строка блокирует
val source = jobsRepository.getFulljobs(), поэтому, как только вы «наблюдаете» - (addSource(source)), изменение уже произошло, поэтомуOnChangedне будет вызываться. Никогда не использовалLiveData, так что могу ошибаться.