diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5a60d17..46bdbfd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ 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 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 putList(key: String, list: List) { + try { + val jsonString = gson.toJson(list) + val encryptedData = Base64.encodeToString(jsonString.toByteArray(), Base64.DEFAULT) + putString(key, encryptedData) + } catch (e: Exception) { + e.printStackTrace() + } + } + + inline fun getList(key: String): List { + return try { + val encryptedData = getString(key) + if (encryptedData.isBlank()) return emptyList() + + val jsonString = String(Base64.decode(encryptedData, Base64.DEFAULT)) + val type: Type = object : TypeToken>() {}.type + gson.fromJson>(jsonString, type) ?: emptyList() + } catch (e: Exception) { + e.printStackTrace() + emptyList() + } + } + + + fun putMap(key: String, map: Map) { + try { + val jsonString = gson.toJson(map) + val encryptedData = Base64.encodeToString(jsonString.toByteArray(), Base64.DEFAULT) + putString(key, encryptedData) + } catch (e: Exception) { + e.printStackTrace() + } + } + + + inline fun getMap(key: String): Map { + return try { + val encryptedData = getString(key) + if (encryptedData.isBlank()) return emptyMap() + + val jsonString = String(Base64.decode(encryptedData, Base64.DEFAULT)) + val type: Type = object : TypeToken>() {}.type + gson.fromJson>(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 { + return sharedPreferences.all.keys + } + + } \ No newline at end of file