我对使用Kotlin的flows
和Jetpack的DataStore
很陌生。但我正在编写一个自定义对象列表(序列化为JSON(,我希望在插入新值之前更新这些对象。
因此,当想要插入一个新元素时,以前我必须读取当前值,因此我从流中收集值,添加新的值,然后在DataStore
上写入。问题是,一旦DataStore
完成了值的写入,我就会从flow
接收到一个新的事件,因此我正在循环写入值。
我的问题是,有没有办法只从flow
中收集一次值,或者在我读取值后取消flow
,或者有没有更好的方法用DataStore
来管理这种情况?
是的,您只能从类似的数据存储中获取数据
// This function belongs on your datastore file
suspend fun getMyCustomData(): String {
val preferences = dataStore.data.first()
return preferences[MY_CUSTOM_KEY] ?: ""
}
读取值后,您可以更新对象,而不会陷入循环。