SharedPreferences 是 Android 提供的一种轻量级存储类,用于存储简单的键值对数据。它非常适合保存应用的配置信息、用户偏好设置等。下面通过 登录界面 来演示 SharedPreferences 类的存储配置过程。
参考文档:https://blog.youkuaiyun.com/casual_clover/article/details/146253001
1、存储数据说明
- 本示例的界面中包含用户名、用户密码和记住密码三个需要存储的数据。
2、SharedPreferences 数据存储类
- 采用 companion object 方式实现数据存储类的单列模式。
- 采用输出 Flow 数据流的方式(如:userNameFlow)提供存储数据给 ViewModel 使用。
- 只在 LoginRepository 类初始化时,读取一次文件中的数据,其他时候只是返回本地数据(如:_userNameFlow)。
- 设置数据时采用 sharedPreferences.edit {} 方式实现,由于 edit() 方法中已经包含 apply() 方法的调用,故无需再次调用 apply() 方法进行提交数据。
package com.android.datastore.sharedPreferences
import android.annotation.SuppressLint
import android.content.Context
import androidx.core.content.edit
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
class LoginRepository(private val context: Context) {
companion object {
@SuppressLint("StaticFieldLeak")
@Volatile
private var INSTANCE: LoginRepository? = null
fun getInstance(context: Context): LoginRepository {
return INSTANCE ?: synchronized(this) {
INSTANCE?.let {
return it
}
val instance = LoginRepository(context)
INSTANCE = instance
instance
}
}
private const val USER_PREFERENCES_NAME = "login_preferences"
private const val KEY_USERNAME = "userName"
private const val KEY_PASSWORD = "password"
private const val KEY_REMEMBER = "remember"
}
private val sharedPreferences =
context.applicationContext.getSharedPreferences(USER_PREFERENCES_NAME, Context.MODE_PRIVATE)
private val _userNameFlow = MutableStateFlow(userName)
val userNameFlow: StateFlow<String> = _userNameFlow
private val _passwordFlow = MutableStateFlow(password)
val passwordFlow: StateFlow<String> = _passwordFlow
private val _rememberFlow = MutableStateFlow(remember)
val rememberFlow: StateFlow<Boolean>

最低0.47元/天 解锁文章
516

被折叠的 条评论
为什么被折叠?



