从 dataStore 首选项返回 int 值

Tak*_*aki 3 android datastore kotlin

我有一个应用程序,我int使用数据存储首选项保存值,当我获取值时,我执行代码并希望返回该int值,以便我可以在代码中的不同位置使用它,但无法弄清楚,如果任何人都可以帮忙,提前谢谢你

我尝试创建一个全局成员来分配该值然后返回,但由于该值是异步返回的,因此它使应用程序崩溃。

  • 这是我的代码
private fun setTextSize() : Int {
        val dataStore = requireContext().createDataStore("textSize")
        lifecycleScope.launch { 
            dataStore.data.collect { 
              val textSize =  it[Common.TEXT_SIZE_PREFERENCE] 
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

har*_*ore 10

如果你想直接获取值,你应该使用runBlocking. 像这样的事情应该可以解决问题:

val textSize = runBlocking { dataStore.data.first() }[Common.TEXT_SIZE_PREFERENCE]
Run Code Online (Sandbox Code Playgroud)


raj*_* ks 5

您可以suspend向函数添加修饰符并使用CoroutineScopeas访问它

suspend fun setTextSize() = dataStore.data.firstOrNull()[Common.TEXT_SIZE_PREFERENCE] ?: -1
Run Code Online (Sandbox Code Playgroud)

访问时

lifeCycleScope.launch{
    val textSize = setTextSize()
}
Run Code Online (Sandbox Code Playgroud)