kotlin数据存储

问题描述

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编写的,但您可能可以从中得到启发。)