TLDR:我今天大部分时间都在为DataStore
个对象而战,更具体地说,为什么大多数Suspend方法似乎永远挂起,只有map {}.first
个方法能让我获得Preferences
对象.
上下文
我正在编写一个使用非常轻量级的本地存储的小型Android应用程序:
- 我需要在应用程序启动时从本地存储中读取所有设置(不需要阻止).
- 当用户与应用程序交互时,更新本地存储.不需要再看书了.
实例
最终奏效的是:
val preferences =
context.transliterationStatesDataStore.data.firstOrNull() ?: return
val preferences =
context.dataStore.data.map { preferences -> preferences }
.first()
我以前试过的方法:
val preferences =
context.dataStore.data.map { preferences -> preferences }
.lastOrNull() ?: return
val preferences =
context.dataStore.data.lastOrNull() ?: return
Log.d("debug", context.dataStore.data.count().toString())
混乱
我搞不懂为什么:
-
.count()
不起作用(永远暂停) -
.lastOrNull()
不起作用(永远暂停) - 当我想要的是磁盘中
Preferences
的latest版本时,读取流的first值感觉是错误的.
有一个相关的问题here,但除了作者提供的更多数据点外,它没有收到任何答案.