需求
当我们登录时, 需要存储用户登录数据
代码
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()
}
}