91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Kotlin中利用SharedPreferences對數據進行存取

發布時間:2020-12-05 15:25:19 來源:億速云 閱讀:248 作者:Leah 欄目:移動開發

這篇文章將為大家詳細講解有關如何在Kotlin中利用SharedPreferences對數據進行存取,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

具體方法如下

/**
 * author: smart
 * time: 2016/10/26
 * 封裝好SharedPreferences 并使用 序列化和反序列化來存儲數據
 * 注意要在全局環境使用
 */
class Preference<T>(val context : Context,val name : String,val default : T) : ReadWriteProperty<Any&#63;,T>{

  val prefs by lazy{context.getSharedPreferences("Realnen",Context.MODE_PRIVATE)}


  override fun getValue(thisRef: Any&#63;, property: KProperty<*>): T {
    return findPreference(name,default)
  }

  override fun setValue(thisRef: Any&#63;, property: KProperty<*>, value: T) {
    putPreference(name,value)
  }

  /**
   * 查找數據 返回給調用方法一個具體的對象
   * 如果查找不到類型就采用反序列化方法來返回類型
   * default是默認對象 以防止會返回空對象的異常
   * 即如果name沒有查找到value 就返回默認的序列化對象,然后經過反序列化返回
   */
  private fun <A> findPreference(name :String,default: A) : A = with(prefs){
    val res : Any = when(default){
      is Long -> getLong(name,default)
      is String -> getString(name,default)
      is Int -> getInt(name,default)
      is Boolean -> getBoolean(name,default)
      is Float -> getFloat(name,default)
      else -> deSerialization(getString(name,serialize(default)))
    }
    res as A
  }

  private fun <A> putPreference(name :String,value: A) = with(prefs.edit()){
    when(value){
      is Long -> putLong(name,value)
      is String -> putString(name,value)
      is Int -> putInt(name,value)
      is Boolean -> putBoolean(name,value)
      is Float -> putFloat(name,value)
      else -> putString(name,serialize(value))
    }.apply()

  }

  /**
   * 刪除全部數據
   */
  fun clearPreference(){
    prefs.edit().clear().commit()
  }

  /**
   * 根據key刪除存儲數據
   */
  fun clearPreference(key : String){
    prefs.edit().remove(key).commit()
  }

  /**
   * 序列化對象

   * @param person
   * *
   * @return
   * *
   * @throws IOException
   */
  @Throws(IOException::class)
  private fun<A> serialize(obj: A): String {
    val byteArrayOutputStream = ByteArrayOutputStream()
    val objectOutputStream = ObjectOutputStream(
        byteArrayOutputStream)
    objectOutputStream.writeObject(obj)
    var serStr = byteArrayOutputStream.toString("ISO-8859-1")
    serStr = java.net.URLEncoder.encode(serStr, "UTF-8")
    objectOutputStream.close()
    byteArrayOutputStream.close()
    return serStr
  }

  /**
   * 反序列化對象

   * @param str
   * *
   * @return
   * *
   * @throws IOException
   * *
   * @throws ClassNotFoundException
   */
  @Throws(IOException::class, ClassNotFoundException::class)
  private fun<A> deSerialization(str: String): A {
    val redStr = java.net.URLDecoder.decode(str, "UTF-8")
    val byteArrayInputStream = ByteArrayInputStream(
        redStr.toByteArray(charset("ISO-8859-1")))
    val objectInputStream = ObjectInputStream(
        byteArrayInputStream)
    val obj = objectInputStream.readObject() as A
    objectInputStream.close()
    byteArrayInputStream.close()
    return obj
  }
}

這里主要用的是代理模式,還有數據類要實現序列化Serializable接口,使用方式:

 var save : LoginSaveBean by Preference<LoginSaveBean>(App.getInstance(),Constant.LOCAL_SAVE_LOGIN_MODEL_KEY, LoginSaveBean("0","0"))

關于如何在Kotlin中利用SharedPreferences對數據進行存取就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肇州县| 冀州市| 怀宁县| 沅江市| 巩义市| 通化县| 伊通| 上思县| 东乌珠穆沁旗| 通海县| 松阳县| 庆阳市| 横峰县| 香港| 资兴市| 贺兰县| 平和县| 内江市| 类乌齐县| 法库县| 四平市| 黄石市| 绥宁县| 四川省| 古蔺县| 万载县| 松溪县| 冀州市| 桑日县| 博罗县| 富阳市| 温泉县| 安丘市| 镇赉县| 盐池县| 麻城市| 柏乡县| 云阳县| 永康市| 梁平县| 武定县|