问题描述
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
}
返回日志数据为真 但在 返回值数据为空
解决方法
我不知道Android,但是快速浏览Google表示LiveData.observe()
方法添加了一个观察者。
这显然是使用许多语言和框架中的标准observer pattern。在相关时间告知观察者(即被叫)。
请注意,观察者可能不立即被调用。在这种情况下,显然不是这样:observe()
调用在添加观察者之后返回,而您的value
仍然是null
;并且您的getValue()
方法返回该null。在以后的某个时间点,可以调用观察者并设置value
,但那时没有人在乎。
我对LiveData不太了解,无法建议如何做,但是我注意到它有一个getValue()
方法,如果该值立即可用,它可能会做您想要的事情。
如果没有,则必须阻塞直到调用观察者。 This question似乎表明了这样做的一种方式。 (答案是用Java编写的,但您可能可以从中得到启发。)