【Android】kotlin - SharedPreferences实现数据存储及使用

需求

当我们登录时, 需要存储用户登录数据

代码

1. SharedPre.kt

import android.content.Context
import android.content.SharedPreferences
import com.google.gson.Gson
import com.google.gson.JsonElement

data class UserInfo(
    val id: Int,
    var username: String,
    var email: String,
    var sex: String,
)

object SharedPrefs {
    private const val TOKEN_PREF = "TOKEN_PREF"
    private const val TOKEN_KEY = "TOKEN_KEY"

    private fun getPreferences(context: Context): SharedPreferences {
        return context.getSharedPreferences(TOKEN_PREF, Context.MODE_PRIVATE)
    }
	
	// 存储单个值
	// 调用 : SharedPrefs.setToken(this@MyActivity, "123456")
    fun setToken(context: Context, token: String) {
        val editor = getPreferences(context).edit()
        editor.putString(TOKEN_KEY, token)
        editor.apply()
    }
	
	// 获取单个值
	// 调用 : token = SharedPrefs.getToken(this@MyActivity)
    fun getToken(context: Context?): String? {
        return context?.let { getPreferences(it).getString(TOKEN_KEY, null) }
    }
	
	// 移除单个值
	// 调用SharedPrefs.removeToken(this@MyActivity)
    fun removeToken(context: Context?) {
        context?.let { getPreferences(it).edit().remove(TOKEN_KEY).apply() }
    }

	// 存储userInfo对象
	// 调用 : SharedPrefs.saveUserToPreferences(this@MyActivity, jsonElement)
    fun saveUserToPreferences(context: Context, userinfo: JsonElement) {
        val gson = Gson()
        val json = gson.toJson(userinfo)
        val sharedPreferences = context.getSharedPreferences("UserPrefs", Context.MODE_PRIVATE)
        val editor = sharedPreferences.edit()
        editor.putString("userinfo", json)
        editor.apply()
    }
	
	// 获取userInfo对象缓存
	// 调用 : userInfo = SharedPrefs.loadUserFromPreferences(this@MyActivity)  userId = userInfo .id
    fun loadUserFromPreferences(context: Context): UserInfo? {
        val sharedPreferences = context.getSharedPreferences("UserPrefs", Context.MODE_PRIVATE)
        val json = sharedPreferences.getString("userinfo", "")
        val gson = Gson()
        return gson.fromJson(json, UserInfo::class.java)
    }
	
	// 更新userInfo对象某个字段
	// 调用 : SharedPrefs.setUserInfo(this@MyActivity, "username", "alic")
    fun setUserInfo(context: Context, editName: String, editValue: String) {
        val gson = Gson()
        val sharedPreferences = context.getSharedPreferences("UserPrefs", Context.MODE_PRIVATE)
        val editor = sharedPreferences.edit()
        val json = sharedPreferences.getString("userinfo", "")
        val myObject1 = Gson().fromJson(json, UserInfo::class.java)

        if (editName == "username") {
            myObject1.username = editValue
        }else if (editName == "email") {
            myObject1.email = editValue
        }else if (editName == "sex") {
            myObject1.sex = editValue
        }

        val myObject2 = gson.toJson(myObject1)
        editor.putString("userinfo", myObject2)
        println("更新后的个人信息 : $myObject2")
        editor.apply()
    }
    
	// 清除所有缓存 
	// 调用 : SharedPrefs.clearAllData(this@MyActivity)
    fun clearAllData(context: Context) {
        val preferences = context.getSharedPreferences("UserPrefs", Context.MODE_PRIVATE)
        val editor = preferences.edit()
        removeToken(context)
        editor.clear()
        editor.apply()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值