Kotlin开发,怎么用DataStore替换SharedPreferences的存值和取值的功能,能给一下详细的代码吗
时间: 2024-02-28 18:53:01 浏览: 119
当我们需要在 Android 应用程序中存储和检索小数据时,通常使用 SharedPreferences。但是,SharedPreferences 不是类型安全的 API,因此在使用时需要小心。
从 Android Jetpack 1.0 开始,Google 推出了一种新的数据存储解决方案:DataStore。DataStore 是一种轻量级、偏向异步操作的数据存储解决方案,用于存储键值对或对象,而且它是类型安全的。
下面是使用 DataStore 替换 SharedPreferences 的示例代码:
1. 添加 Gradle 依赖
```
dependencies {
implementation "androidx.datastore:datastore-preferences:1.0.0-alpha01"
}
```
2. 创建 DataStore 对象
```
val dataStore: DataStore<Preferences> = context.createDataStore(
name = "my_datastore"
)
```
3. 存储数据
```
suspend fun saveData(value: String) {
dataStore.edit { preferences ->
preferences[KEY_NAME] = value
}
}
```
4. 读取数据
```
val nameFlow: Flow<String> = dataStore.data
.map { preferences ->
preferences[KEY_NAME] ?: ""
}
```
完整示例代码如下:
```
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
class MyDataStore(context: Context) {
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "my_datastore")
companion object {
private val KEY_NAME = stringPreferencesKey("key_name")
}
private val dataStore: DataStore<Preferences> = context.createDataStore(
name = "my_datastore"
)
suspend fun saveData(value: String) {
dataStore.edit { preferences ->
preferences[KEY_NAME] = value
}
}
val nameFlow: Flow<String> = dataStore.data
.map { preferences ->
preferences[KEY_NAME] ?: ""
}
}
```
这个示例代码仅展示了如何使用 DataStore 存储和检索字符串类型的数据。如果需要存储其他类型的数据,可以使用不同的 `*PreferencesKey` 对象,例如:`booleanPreferencesKey`、`intPreferencesKey`、`floatPreferencesKey` 等等。
阅读全文