【Android 数据】使用 SharedPreferences 类保存数据的完整示例

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> 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值