[Android]SharedPreferences可视化管理key-value数据存储

1.定义 PrefsManager

创建一个用于管理 SharedPreferences 的单例工具类,并使用泛型方法来简化对不同类型数据的存取操作,该类提供了泛型的 get 和 set 方法来处理各种数据类型。

import android.content.Context
import android.content.SharedPreferences
import android.util.Log

object PrefsManager {
    private lateinit var sharedPreferences: SharedPreferences

    fun init(context: Context) {
        sharedPreferences = context.getSharedPreferences("AppPreferences", Context.MODE_PRIVATE)
    }

    fun <T> get(prefKey: PrefKey): T {
        val defaultValue: T = PrefDefaults.getDefaultValue(prefKey)
        return when (defaultValue) {
            is Boolean -> sharedPreferences.getBoolean(prefKey.key, defaultValue) as? T ?: defaultValue
            is Int -> sharedPreferences.getInt(prefKey.key, defaultValue) as? T ?: defaultValue
            is String -> sharedPreferences.getString(prefKey.key, defaultValue)  as? T ?: defaultValue
            else -> {
                Log.w("SharedPreferences", "Unsupported type for SharedPreferences.get")
                defaultValue
            }
        }
    }

    fun <T> set(prefKey: PrefKey, value: T) {
        with(sharedPreferences.edit()) {
            when (value) {
                is Boolean -> putBoolean(prefKey.key, value)
                is Int -> putInt(prefKey.key, value)
                is String -> putString(prefKey.key, value)
                else -> Log.w("SharedPreferences", "Unsupported type for SharedPreferences.set")
            }
            apply()
        }
    }
}

/// 让 PrefKey 枚举仅包含用户定义的键(key)
enum class PrefKey(val key: String) {
    IS_LOGGED_IN("isLoggedIn"),
    USER_AGE("userAge"),
    USER_NAME("userName");
}

/// 管理默认值和类型
object PrefDefaults {
    private val defaultValues = mapOf<PrefKey, Any>(
        PrefKey.IS_LOGGED_IN to false,
        PrefKey.USER_AGE to 18,
        PrefKey.USER_NAME to "John Doe"
    )

    @Suppress("UNCHECKED_CAST")
    fun <T> getDefaultValue(prefKey: PrefKey): T = defaultValues[prefKey] as T
}

2.使用 PrefsManager

初始化

首先需要在合适的地方(如在 Application 类或主 Activity 的 onCreate 方法中)初始化 PrefsManager.

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        PrefsManager.init(this)
    }
}

存取数据

使用 PrefsManager 时,您不需要关心类型和默认值,这些都是在内部处理的.

// 存储数据
PrefsManager.set(PrefKey.IS_LOGGED_IN, true)
PrefsManager.set(PrefKey.USER_AGE, 30)
PrefsManager.set(PrefKey.USER_NAME, "Alice")

// 读取数据
val isLoggedIn: Boolean = PrefsManager.get(PrefKey.IS_LOGGED_IN)
val userAge: Int = PrefsManager.get(PrefKey.USER_AGE)
val userName: String = PrefsManager.get(PrefKey.USER_NAME)

相关推荐

  1. [Android]SharedPreferences管理key-value数据存储

    2024-04-24 19:02:02       29 阅读
  2. Vue从数组中取出数据并以key-value结构存储

    2024-04-24 19:02:02       59 阅读
  3. 数据Seaborn

    2024-04-24 19:02:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 19:02:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 19:02:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 19:02:02       82 阅读
  4. Python语言-面向对象

    2024-04-24 19:02:02       91 阅读

热门阅读

  1. python 小知识:enumerate、iterator用法与区别

    2024-04-24 19:02:02       34 阅读
  2. 每日一练 | 华为认证真题练习Day220

    2024-04-24 19:02:02       35 阅读
  3. linux-redis常用命令

    2024-04-24 19:02:02       34 阅读
  4. 服用5年份筑基丹 - React篇

    2024-04-24 19:02:02       29 阅读
  5. 周报 | 24.4.15-24.4.21文章汇总

    2024-04-24 19:02:02       35 阅读
  6. Python和Julia河流湖泊沿海水域特征数值算法模型

    2024-04-24 19:02:02       28 阅读
  7. 笨蛋学C++【C++基础第二弹】

    2024-04-24 19:02:02       26 阅读