MediatorLiveData не работает без ViewModel

У меня проблема с 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.

конечно, эта строка блокирует val source = jobsRepository.getFulljobs(), поэтому, как только вы «наблюдаете» - (addSource(source)), изменение уже произошло, поэтому OnChanged не будет вызываться. Никогда не использовал LiveData, так что могу ошибаться.

Mark 19.01.2019 14:27
0
1
437
2

Ответы 2

Я не уверен в версии Kotlin для реализации MediatorLiveData, но в версии Java вам нужно будет реализовать onChanged() для получения данных. Вы можете сослаться на эту тему. Надеюсь это поможет !

https://stackoverflow.com/a/44471378/1992013

"вам нужно будет реализовать onChanged()" - это внутри (source) { // lambda }

Mark 19.01.2019 14:29

Я не уверен, почему вы должны использовать MediatorLiveData в других местах. На самом деле вы можете использовать MutableLiveData и наблюдать за ним, где хотите.

Проверьте мою реализацию MVVM, чтобы увидеть, как она работает.

Kotlin-MVVM-Демо

Другие вопросы по теме