Kotlin 封装万能SharedPreferences存取任何类型详解
/**
* author: smart
* time: 2016/10/26
* 封装好SharedPreferences 并使用 序列化和反序列化来存储数据
* 注意要在全局环境使用
*/
class Preference<T>(val context : Context,val name : String,val default : T) : ReadWriteProperty<Any?,T>{
val prefs by lazy{context.getSharedPreferences("Realnen",Context.MODE_PRIVATE)}
override fun getValue(thisRef: Any?, property: KProperty<*>): T {
return findPreference(name,default)
}
override fun setValue(thisRef: Any?, 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存取任何类型详解
# Kotlin文件读写与SharedPreferences存储功能实现方法
# 序列化
# 的是
# 放在
# 当你
# 要在
# 这条
# 希望能
# 谢谢大家
# 方法来
# 装好
# 全局变量
# 以防止
# putPreference
# MODE_PRIVATE
# property
# setValue
# thisRef
# getValue
# fun
# override
相关文章:
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
建站主机核心功能解析:服务器选择与网站搭建流程指南
建站之星好吗?新手能否轻松上手建站?
如何做网站制作流程,*游戏网站怎么搭建?
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站主机数据库如何配置才能提升网站性能?
如何通过宝塔面板实现本地网站访问?
Android自定义listview布局实现上拉加载下拉刷新功能
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站上市公司网站建设方案与SEO优化服务定制指南
网站制作网站,深圳做网站哪家比较好?
如何在VPS电脑上快速搭建网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
实例解析angularjs的filter过滤器
专业商城网站制作公司有哪些,pi商城官网是哪个?
定制建站流程解析:需求评估与SEO优化功能开发指南
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
南京网站制作费用,南京远驱官方网站?
如何通过VPS建站实现广告与增值服务盈利?
Swift开发中switch语句值绑定模式
网站制作公司排行榜,四大门户网站排名?
如何在云服务器上快速搭建个人网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何在万网主机上快速搭建网站?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
建站之星展会模版如何一键下载生成?
如何在腾讯云服务器快速搭建个人网站?
如何通过万网虚拟主机快速搭建网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
常州自助建站费用包含哪些项目?
网站网页制作专业公司,怎样制作自己的网页?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
官网建站费用明细查询_企业建站套餐价格及收费标准指南
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何用免费手机建站系统零基础打造专业网站?
制作网站的软件免费下载,免费制作app哪个平台好?
想学网站制作怎么学,建立一个网站要花费多少?
如何选择最佳自助建站系统?快速指南解析优劣
建站主机助手选型指南:2025年热门推荐与高效部署技巧
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
建站之星代理如何获取技术支持?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何快速生成橙子建站落地页链接?
*请认真填写需求信息,我们会在24小时内与您取得联系。