【问题标题】:MediatorLiveData doesn't work without ViewModel如果没有 ViewModel,MediatorLiveData 将无法工作
【发布时间】:2019-01-19 13:04:14
【问题描述】:

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,所以我可能是错的。

标签: android kotlin android-livedata


【解决方案1】:

我不确定 Kotlin 版本的 MediatorLiveData 实现,但在 Java 版本中,您需要实现 onChanged() 来获取数据。你可能想参考这个线程。希望这会有所帮助!

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

【讨论】:

  • "你需要实现 onChanged()" - 它在 (source) { // lambda }
【解决方案2】:

我不确定您为什么必须在其他地方使用 MediatorLiveData。您实际上可以使用 MutableLiveData 并在任何您想要的地方观察它。

查看我的 MVVM 实现,看看它是如何工作的。

Kotlin-MVVM-Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-29
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多