如何检查Android的DataStore中是否有保存的数据?



这是我的UserManager.kt类,它有一个保存和映射数据的函数,但如何创建一个函数告诉我数据存储是否有用户?

class UserManager(context: Context) {
private val dataStore = context.createDataStore(name = "user_prefs")
companion object {
val USER_NAME_KEY = preferencesKey<String>("USER_NAME")
val USER_NUMBER_KEY = preferencesKey<Int>("USER_NUMBER")
}
suspend fun storeUser(number: Int, name: String) {
dataStore.edit {
it[USER_NUMBER_KEY] = number
it[USER_NAME_KEY] = name
}
}
val userNumberFlow: Flow<Int> = dataStore.data.map {
it[USER_NUMBER_KEY] ?: 0
}
val userNameFlow: Flow<String> = dataStore.data.map {
it[USER_NAME_KEY] ?: ""
}
}

您可以将数据存储视为映射,并检查它是否包含您的键。

您需要将密钥作为参数传递给下面的方法,它将根据密钥的可用性返回true或false。

fun isKeyStored(key: Preferences.Key<String>): Flow<Boolean>  = 
context.dataStore.data.map {
preference -> preference.contains(key)
}

请注意,当声明val USER_NAME_KEY = preferencesKey<String>("USER_NAME")时,不再支持preferencesKey<String>-在这种情况下使用stringPreferencesKey("USER_NAME")代替。我花了好一会儿才弄清楚到底发生了什么。

在我的情况下,我也不得不使用applicationContext而不是context

最新更新