- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Kotlin中的SharedPreferences优雅封装与使用
引言
在Android开发中,SharedPreferences是一个非常实用的轻量级存储机制,用于保存应用的配置信息和简单的数据。然而直接操作SharedPreferences可能会导致代码重复和不易维护。在Kotlin中,我们可以利用其强大的委托属性功能对SharedPreferences进行封装,从而使得读写数据更为简洁、直观。
封装Kotlin类
importandroid.content.Context
importandroid.content.SharedPreferences
importkotlin.properties.Delegates.observable
classMyPreferences(context:Context,fileName:String=default_prefs){
privatevalsharedPreferences:SharedPreferences=
context.getSharedPreferences(fileName,Context.MODE_PRIVATE)
//封装一个可观察的委托属性
varusername:Stringbyobservable(sharedPreferences.getString(username,)){_,old,new-
if(old!=new){
sharedPreferences.edit().putString(username,new).apply()
}
}
//同样的方式封装其他类型的数据
varuserAge:Intbyobservable(sharedPreferences.getInt(userAge,0)){_,old,new-
if(old!=new){
sharedPreferences.edit().putInt(userAge,new).apply()
}
}
//其他自定义方法...
}
//使用示例
valprefs=MyPreferences(this)
prefs.username=JohnDoe
println(prefs.username)//输出已保存的用户名
基于委托属性的实现
在上述示例中,我们创建了一个名为MyPreferences的类,并且为每种需要持久化的数据类型封装了相应的委托属性。这里使用了observable委托,当属性值发生改变时,会自动将新值保存回SharedPreferences。
此外,还可以进一步优化,通过泛型和扩展函数的方式实现一个通用的Preference类,能够处理多种数据类型的存取,减少重复代码:
importandroid.content.SharedPreferences
importkotlin.reflect.KProperty
classPreferenceT(privatevalpreferences:SharedPreferences,
privatevalkey:String,
privatevaldefaultValue:T){
operatorfungetValue(thisRef:Any?,property:KProperty*):T{
returnwhen(defaultValue){
isString-preferences.getString(key,defaultValue)asT
isInt-preferences.getInt(key,defaultValue)asT
isBoolean-preferences.getBoolean(key,defaultValue)asT
//...对其他类型进行扩展
else-throwIllegalArgumentException(ThistypecantbesavedusingPreferences)
}
}
operatorfu
您可能关注的文档
- 2018-2019年最新人教版九年级化学下册第十单元-酸和碱期中试卷A4打印.docx
- 2019-2020年度人教版八年级物理下册第十章浮力月考试卷精品.docx
- 2021-2022学年度八年级数学下册模拟测试卷-614.docx
- 2021-2022学年度八年级数学下册模拟测试卷-2221.docx
- 2021-2022学年度八年级数学下册模拟测试卷-3063.docx
- 2021-2022学年度八年级数学下册模拟测试卷-6961.docx
- DeepSeek提示词使用技巧.docx
- Java实现责任链策略模式优雅处理多级请求的方式.docx
- JAVA实战订单超时自动取消设计方案.docx
- Java线程池原理详解.docx
- 2024年陕西咸阳亨通电力(集团)有限公司供电服务业务部直聘用工招聘145人笔试参考题库附带答案详解 .docx
- 2024年中建四局土木工程有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年四川雅茶贸易有限公司公开招聘和考察聘用人员3人笔试参考题库附带答案详解 .docx
- 2024年中国烟草总公司辽宁省公司公开招聘拟录用人员(166人)笔试参考题库附带答案详解 .docx
- 2024江苏连云港中诚物业管理有限公司招聘工作人员1人笔试参考题库附带答案详解 .docx
- [毕节]2025年贵州毕节市引进人才649人笔试历年参考题库附带答案详解.docx
- 2024年度中国东航技术应用研发中心有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年福建省厦门盐业有限责任公司春季人才招聘1人笔试参考题库附带答案详解 .docx
- 2024年山东省环保发展集团绿能有限公司职业经理人招聘2人笔试参考题库附带答案详解 .docx
- 2024年安徽滁州郊源阳光电力维修工程有限责任公司招聘41人(第一批次)笔试参考题库附带答案详解 .docx
文档评论(0)