Share preference util

This commit is contained in:
renhaoting 2025-11-19 19:23:04 +08:00
parent 9e12f98bb7
commit 086bb93212
4 changed files with 186 additions and 3 deletions

View File

@ -5,7 +5,7 @@
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application <application
android:name=".App" android:name=".VidiDinApp"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"

View File

@ -5,4 +5,6 @@ import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp @HiltAndroidApp
class App : BaseApp() class VidiDinApp : BaseApp() {
}

View File

@ -8,6 +8,7 @@ import androidx.core.view.updatePadding
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.ama.core.architecture.appBase.AppViewsFragment import com.ama.core.architecture.appBase.AppViewsFragment
import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.setStatusBarDarkFont import com.ama.core.architecture.util.setStatusBarDarkFont
import com.gamedog.vididin.main.interfaces.OnTabClickAgainListener import com.gamedog.vididin.main.interfaces.OnTabClickAgainListener
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint

View File

@ -1,11 +1,191 @@
package com.ama.core.architecture.util package com.ama.core.architecture.util
import android.content.Context
import android.content.SharedPreferences
import android.util.Base64
import com.ama.core.architecture.BaseApp
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import java.lang.reflect.Type
class SpUtil private constructor() {
class SpUtil private constructor(spFileName: String) {
companion object { companion object {
const val KEY_X1 = "11111"
const val KEY_X2 = "22222"
private const val DEFAULT_SP_NAME = "enhanced_prefs"
@Volatile
private var instance: SpUtil? = null
fun instance(prefName: String = DEFAULT_SP_NAME): SpUtil {
return instance ?: synchronized(this) {
instance ?: SpUtil(prefName).also {
instance = it
}
}
}
} }
val gson: Gson = Gson()
private val sharedPreferences: SharedPreferences
init {
sharedPreferences = BaseApp.appContext().getSharedPreferences(spFileName, Context.MODE_PRIVATE)
}
// ----------- 基本数据类型操作 -----------
fun putString(key: String, value: String) {
sharedPreferences.edit().putString(key, value).apply()
}
fun getString(key: String, defaultValue: String = ""): String {
return sharedPreferences.getString(key, defaultValue) ?: defaultValue
}
fun putInt(key: String, value: Int) {
sharedPreferences.edit().putInt(key, value).apply()
}
fun getInt(key: String, defaultValue: Int = 0): Int {
return sharedPreferences.getInt(key, defaultValue)
}
fun putBoolean(key: String, value: Boolean) {
sharedPreferences.edit().putBoolean(key, value).apply()
}
fun getBoolean(key: String, defaultValue: Boolean = false): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun putLong(key: String, value: Long) {
sharedPreferences.edit().putLong(key, value).apply()
}
fun getLong(key: String, defaultValue: Long = 0L): Long {
return sharedPreferences.getLong(key, defaultValue)
}
fun putFloat(key: String, value: Float) {
sharedPreferences.edit().putFloat(key, value).apply()
}
fun getFloat(key: String, defaultValue: Float = 0f): Float {
return sharedPreferences.getFloat(key, defaultValue)
}
// ----------- 复杂对象 -----------
fun <T> putObject(key: String, obj: T) {
try {
val jsonString = gson.toJson(obj)
val encryptedData = Base64.encodeToString(jsonString.toByteArray(), Base64.DEFAULT)
putString(key, encryptedData)
} catch (e: Exception) {
e.printStackTrace()
}
}
inline fun <reified T> getObject(key: String, defaultObj: T? = null): T? {
return try {
val encryptedData = getString(key)
if (encryptedData.isBlank()) return defaultObj
val jsonString = String(Base64.decode(encryptedData, Base64.DEFAULT))
gson.fromJson(jsonString, T::class.java) ?: defaultObj
} catch (e: Exception) {
e.printStackTrace()
defaultObj
}
}
fun <T> putList(key: String, list: List<T>) {
try {
val jsonString = gson.toJson(list)
val encryptedData = Base64.encodeToString(jsonString.toByteArray(), Base64.DEFAULT)
putString(key, encryptedData)
} catch (e: Exception) {
e.printStackTrace()
}
}
inline fun <reified T> getList(key: String): List<T> {
return try {
val encryptedData = getString(key)
if (encryptedData.isBlank()) return emptyList()
val jsonString = String(Base64.decode(encryptedData, Base64.DEFAULT))
val type: Type = object : TypeToken<List<T>>() {}.type
gson.fromJson<List<T>>(jsonString, type) ?: emptyList()
} catch (e: Exception) {
e.printStackTrace()
emptyList()
}
}
fun <K, V> putMap(key: String, map: Map<K, V>) {
try {
val jsonString = gson.toJson(map)
val encryptedData = Base64.encodeToString(jsonString.toByteArray(), Base64.DEFAULT)
putString(key, encryptedData)
} catch (e: Exception) {
e.printStackTrace()
}
}
inline fun <reified K, reified V> getMap(key: String): Map<K, V> {
return try {
val encryptedData = getString(key)
if (encryptedData.isBlank()) return emptyMap()
val jsonString = String(Base64.decode(encryptedData, Base64.DEFAULT))
val type: Type = object : TypeToken<Map<K, V>>() {}.type
gson.fromJson<Map<K, V>>(jsonString, type) ?: emptyMap()
} catch (e: Exception) {
e.printStackTrace()
emptyMap()
}
}
// ----------- 工具方法 -----------
fun contains(key: String): Boolean {
return sharedPreferences.contains(key)
}
fun remove(key: String) {
sharedPreferences.edit().remove(key).apply()
}
fun clear() {
sharedPreferences.edit().clear().apply()
}
fun getAllKeys(): Set<String> {
return sharedPreferences.all.keys
}
} }