var value: String = ""
fun getValue(key: String, lifecycleOwner: LifecycleOwner): String {
val data = dataStore.data.map { pre ->
pre[preferencesKey<String>(key)]
}
data.asLiveData().observe(lifecycleOwner, Observer {
value = it ?: "noData"
Log.i("MONO", "A | $value")
})
return value
}返回日志数据为真,但在返回值中为空。
发布于 2020-11-04 21:43:07
我不知道Android,但是一个快速的Google表示LiveData.observe()方法添加了一个观察者。
这显然是在使用您在许多语言和框架中找到的标准观测器模式。观察者在相关的时间被告知(即称为)。
请注意,观察者可能不会立即被调用。在这种情况下,显然不是:observe()调用在添加观察者之后返回,而您的value仍然是null;而getValue()方法返回那个null。在以后的某个时候,观察者可能会被调用并设置value,但到那时已经不关心它了。
我不太了解LiveData,无法就该做什么提出建议,但我注意到它有一个getValue()方法,如果该值立即可用,它可能会执行您想做的事情。
如果没有,则必须阻塞,直到调用观察者为止。这个问题似乎表明了一种方法。(答案是用Java表示的,但您可能会从中得到想法。)
https://stackoverflow.com/questions/64682480
复制相似问题