{"id":1332,"date":"2021-04-28T14:27:04","date_gmt":"2021-04-28T06:27:04","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=1332"},"modified":"2023-04-10T13:17:30","modified_gmt":"2023-04-10T05:17:30","slug":"sharedpreferences-%e5%b7%a5%e5%85%b7%e9%a1%9e-%e5%84%b2%e5%ad%98%e7%89%a9%e4%bb%b6%e5%84%b2%e5%ad%98%e8%b3%87%e6%96%99","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/sharedpreferences-%e5%b7%a5%e5%85%b7%e9%a1%9e-%e5%84%b2%e5%ad%98%e7%89%a9%e4%bb%b6%e5%84%b2%e5%ad%98%e8%b3%87%e6%96%99\/","title":{"rendered":"Util SharedPreferences \u5132\u5b58\u7269\u4ef6&#038;\u5132\u5b58\u8cc7\u6599"},"content":{"rendered":"<h1>SharedPreferences \u5de5\u5177\u985e \u5132\u5b58\u7269\u4ef6&#038;\u5132\u5b58\u8cc7\u6599<\/h1>\n<ol>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/sharedpreferences-\u5de5\u5177\u985e-\u5132\u5b58\u7269\u4ef6\u5132\u5b58\u8cc7\u6599\/fly\/util\/#a\">SharedInfo<\/a><\/li>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/sharedpreferences-\u5de5\u5177\u985e-\u5132\u5b58\u7269\u4ef6\u5132\u5b58\u8cc7\u6599\/fly\/util\/#b\">SPUtil<\/a><\/li>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/sharedpreferences-\u5de5\u5177\u985e-\u5132\u5b58\u7269\u4ef6\u5132\u5b58\u8cc7\u6599\/fly\/util\/#c\">\u4f7f\u7528\u65b9\u6cd5<\/a><\/li>\n<li><a href=\"https:\/\/badgameshow.com\/fly\/sharedpreferences-\u5de5\u5177\u985e-\u5132\u5b58\u7269\u4ef6\u5132\u5b58\u8cc7\u6599\/fly\/util\/#d\">\u6548\u679c\u5c55\u793a<\/a><\/li>\n<\/ol>\n<hr \/>\n<p><a id=\"a\"><\/a><\/p>\n<h3>1.SharedInfo<\/h3>\n<pre><code class=\"language-kotlin line-numbers\">import android.content.Context\nimport android.content.SharedPreferences\n\n\/**\n * Author: FlyWei\n * E-mail: tony91097@gmail.com\n * Date: 2021\/4\/28\n *\/\n\nclass SharedInfo private constructor() {\n\n    private var sp: SharedPreferences\n\n    companion object {\n        val instance: SharedInfo by lazy { SharedInfo() }\n        private lateinit var fileName: String\n        private lateinit var context: Context\n\n        fun init(fileName: String, context: Context) {\n            this.fileName = fileName\n            this.context = context\n        }\n    }\n\n    init {\n        sp = SPUtil.getSp(context, fileName)\n    }\n\n    \/**\n     * \u7372\u53d6\u8cc7\u6599\n     *\/\n    fun &lt;T&gt; getEntity(clazz: Class&lt;T&gt;): T? =\n        SPUtil.getEntity(sp, clazz)\n\n    fun getValue(key: String, defaultValue: Any): Any? =\n        SPUtil.getValue(sp, key, defaultValue)\n\n    \/**\n     * \u4fdd\u5b58\u8cc7\u6599\n     *\/\n    fun saveEntity(any: Any) {\n        SPUtil.saveEntity(sp, any)\n    }\n\n    fun saveValue(key: String, value: Any) {\n        SPUtil.saveValue(sp, key, value)\n    }\n\n    \/**\n     * \u522a\u9664\u8cc7\u6599\n     *\/\n    fun remove(clazz: Class&lt;*&gt;) {\n        SPUtil.remove(sp, clazz.name)\n    }\n\n    fun remove(key: String) {\n        SPUtil.remove(sp, key)\n    }\n\n    \/**\n     * \u6e05\u9664\u8cc7\u6599\n     *\/\n    fun clear() {\n        SPUtil.clear(sp)\n    }\n}\n<\/code><\/pre>\n<p><a id=\"b\"><\/a><\/p>\n<h3>2.SPUtil<\/h3>\n<h4>\u5c0e\u5165Gson\u505aSerializable<\/h4>\n<pre><code class=\"language-gradle line-numbers\">implementation 'com.google.code.gson:gson:2.8.6'\n<\/code><\/pre>\n<pre><code class=\"language-kotlin line-numbers\">import android.content.Context\nimport android.content.SharedPreferences\nimport android.util.Base64\nimport com.google.gson.Gson\n\n\/**\n * Author: FlyWei\n * E-mail: tony91097@gmail.com\n * Date: 2021\/4\/28\n *\/\n\nobject SPUtil {\n\n    fun getSp(context: Context, fileName: String): SharedPreferences {\n        return context.getSharedPreferences(fileName, Context.MODE_PRIVATE)\n    }\n\n    fun saveValue(sp: SharedPreferences, key: String, value: Any) {\n        val editor = sp.edit()\n        when (value) {\n            is String -&gt; editor.putString(key, value).apply()\n            is Boolean -&gt; editor.putBoolean(key, value).apply()\n            is Float -&gt; editor.putFloat(key, value).apply()\n            is Int -&gt; editor.putInt(key, value).apply()\n            is Long -&gt; editor.putLong(key, value).apply()\n            else -&gt; require(value !is Set&lt;*&gt;) { \"Value can not be Set object!\" }\n        }\n    }\n\n    fun getValue(sp: SharedPreferences, key: String, defaultValue: Any): Any? {\n        when (defaultValue) {\n            is String -&gt; return sp.getString(key, defaultValue)\n            is Boolean -&gt; return sp.getBoolean(key, defaultValue)\n            is Float -&gt; return sp.getFloat(key, defaultValue)\n            is Int -&gt; return sp.getInt(key, defaultValue)\n            is Long -&gt; return sp.getLong(key, defaultValue)\n            else -&gt; require(defaultValue !is Set&lt;*&gt;) { \"Can not to get Set value!\" }\n        }\n        return null\n    }\n\n    fun saveEntity(sp: SharedPreferences, any: Any) {\n        val key = any.javaClass.name\n        val value = String(Base64.encode(obj2str(any).toByteArray(), Base64.DEFAULT))\n        saveValue(sp, key, value)\n    }\n\n    fun &lt;T&gt; getEntity(sp: SharedPreferences, clazz: Class&lt;T&gt;): T? {\n        val key = clazz.name\n        var value = getValue(sp, key, \"\") as String\n        value = String(Base64.decode(value, Base64.DEFAULT))\n        return str2obj(value, clazz)\n    }\n\n    fun remove(sp: SharedPreferences, key: String) {\n        sp.edit().remove(key).apply()\n    }\n\n    fun clear(sp: SharedPreferences) {\n        sp.edit().clear().apply()\n    }\n\n    \/**\n     * Object \u5230 String \u7684\u5e8f\u5217\u5316\n     *\/\n    private fun obj2str(any: Any): String {\n        return try {\n            Gson().toJson(any)\n        } catch (e: java.lang.Exception) {\n            e.printStackTrace()\n            \"\"\n        }\n    }\n\n    \/**\n     * String \u5230 Object \u7684\u53cd\u5e8f\u5217\u5316\n     *\/\n    private fun &lt;T&gt; str2obj(string: String, clazz: Class&lt;T&gt;): T? {\n        return try {\n            Gson().fromJson(string, clazz)\n        } catch (e: Exception) {\n            e.printStackTrace()\n            null\n        }\n    }\n}\n<\/code><\/pre>\n<p><a id=\"c\"><\/a><\/p>\n<h3>3.\u4f7f\u7528\u65b9\u6cd5<\/h3>\n<pre><code class=\"language-kotlin line-numbers\">import android.os.Bundle\nimport android.util.Log\nimport androidx.appcompat.app.AppCompatActivity\n\nclass MainActivity : AppCompatActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        \/\/ \u521d\u59cb\u5316(\u4e00\u5b9a\u8981)\n        SharedInfo.init(\"info\", applicationContext)\n\n        \/\/\u53d6\u5f97\u7269\u4ef6\n        SharedInfo.instance.getEntity(Person::class.java)?.let {\n            Log.e(\"GGG\", it.name)\n            Log.e(\"GGG\", it.age.toString())\n        }\n        \/\/\u53d6\u5f97\u8cc7\u6599\n        val name = SharedInfo.instance.getValue(\"name\", \"no\") as String\n        Log.e(\"GGG\", name)\n\n        \/\/\u5132\u5b58\u7269\u4ef6\n        val person = Person(\"wade\", 25)\n        SharedInfo.instance.saveEntity(person)\n        \/\/\u5132\u5b58\u8cc7\u6599\n        SharedInfo.instance.saveValue(\"name\", \"steven\")\n\n        \/\/\u522a\u9664\u7269\u4ef6&amp;\u8cc7\u6599\n        SharedInfo.instance.remove(\"name\")\n        SharedInfo.instance.remove(Person::class.java)\n\n        \/\/\u5168\u90e8\u6e05\u7a7a\n        SharedInfo.instance.clear()\n    }\n}\n<\/code><\/pre>\n<p><a id=\"d\"><\/a><\/p>\n<h3>4.\u6548\u679c\u5c55\u793a<\/h3>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/1619588837698.jpg\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/1619588837698.jpg\" alt=\"\" \/><\/a><\/p>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/1619588830898.jpg\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/1619588830898.jpg\" alt=\"\" \/><\/a><\/p>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/1619588867914.jpg\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/04\/1619588867914.jpg\" alt=\"\" \/><\/a><\/p>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>SharedPreferences \u5de5\u5177\u985e \u5132\u5b58\u7269\u4ef6&#038;\u5132\u5b58\u8cc7\u6599 SharedInfo SPUtil  &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[9],"tags":[15,180,16],"class_list":["post-1332","post","type-post","status-publish","format-standard","hentry","category-util","tag-kotlin","tag-sharedpreferences","tag-util"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1332","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=1332"}],"version-history":[{"count":6,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1332\/revisions"}],"predecessor-version":[{"id":1900,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1332\/revisions\/1900"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=1332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=1332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=1332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}