HarmonyOS7 PreferenceManager 本地存储封装:小项目也要写得稳

发布时间:2026/11/7 12:30:54

HarmonyOS7 PreferenceManager 本地存储封装:小项目也要写得稳 文章目录为什么需要 Preferences单例写法初始化依赖 UIContextsetValue 做了 JSON 序列化getValue 再解析回来如果要做“不再提示”怎么写写在最后智感握姿项目里有个PreferenceManager目前用得不算多但它的封装方式值得单独讲。小项目也提前封装本地存储后面加“下次不再提示”这类功能会舒服很多。项目源码https://gitcode.com/HarmonyOS_Samples/SmartReach/tree/master为什么需要 Preferences这个项目启动时会弹一个提示弹窗告诉用户智感握姿怎么体验。真实产品里通常会有“我知道了”“不再提醒”这类逻辑。Preferences就适合存这种轻量数据开关、标记、简单配置。单例写法PreferenceManager.ets里先做了单例exportclassPreferenceManager{privatepreferences?:preferences.Preferences;privatestaticinstance:PreferenceManager;privateconstructor(){this.initPreference(PREFERENCES_NAME);}publicstaticgetInstance():PreferenceManager{if(!PreferenceManager.instance){PreferenceManager.instancenewPreferenceManager();}returnPreferenceManager.instance;}}这样页面里只需要privatepreferenceManagerPreferenceManager.getInstance();不用每个页面都自己初始化一次存储对象。初始化依赖 UIContext初始化代码是privateinitPreference(storeName:string):void{constuiContext:UIContext|undefinedAppStorageV2.connect(UIContext,StorageKey.UI_CONTEXT);try{if(!uiContext){Logger.error(TAG,initPreference failed, cause uiContext is undefined.);return;}this.preferencespreferences.getPreferencesSync(uiContext.getHostContext()asContext,{name:storeName});}catch(err){Logger.error(TAG,initPreference failed, err code:${err.code},msg:${err.message});}}这里能看出前面WindowUtil存UIContext的价值。没有上下文Preferences 初始化不了。setValue 做了 JSON 序列化存值代码publicsetValueT(key:string,value:T,retry:booleantrue):void{if(this.preferences){try{this.preferences.putSync(key,JSON.stringify(value));this.saveValue();}catch(e){Logger.error(TAG,Preferences put${key}failed, err code:${e?.code},msg:${e?.message});}}else{if(retry){this.initPreference(PREFERENCES_NAME);this.setValueT(key,value,false);}}}它没有只存字符串而是把泛型值JSON.stringify()后再存。这样布尔值、数字、简单对象都能统一处理。getValue 再解析回来读取时再解析publicgetValueT(key:string,defaultValue?:ValueType,retry:booleantrue):T|null{if(this.preferences){try{constresthis.preferences.getSync(key,defaultValue)letvalue:T|nullnull;if(res){valueJSON.parse(resasstring)asT;}returnvalue;}catch(err){Logger.error(TAG,Preferences get${key}failed. err code:${err.code},msg:${err.message});returnnull;}}returnnull;}这里的retry设计也挺贴心。如果第一次发现preferences还没初始化会再尝试初始化一次而不是直接失败。如果要做“不再提示”怎么写示例里定义了constNEVER_ALERT_KEY:stringNEVER_ALERT;可以这样扩展constneverAlertthis.preferenceManager.getValueboolean(NEVER_ALERT_KEY,false);if(!neverAlert){this.showAlert();}this.preferenceManager.setValueboolean(NEVER_ALERT_KEY,true);这段不是当前项目完整实现但很适合基于现有封装继续加功能。写在最后PreferenceManager在这个示例里不是主角但它体现了工程意识存储初始化、异常处理、重试、序列化都提前考虑了。小白写项目时可以直接学这个套路别在页面里到处散落preferences.getPreferencesSync()。
延伸阅读

更多相关文章

2026/10/31 21:14:13

智慧校园新篇章:AI模型在作业批改与讲解中的应用探索

智慧校园新篇章:AI模型在作业批改与讲解中的应用探索 在智慧校园的建设浪潮中,教育技术的革新正以前所未有的速度改变着传统的教学模式。其中,人工智能(AI)模型的应用尤为引人注目,特别是在作业批改与讲解环…

2026/11/3 15:24:41

AI模型在供应链风险预警文本分析中的应用探索

AI模型在供应链风险预警文本分析中的应用探索 在当今全球化的商业环境中,供应链的稳定运行对于企业的生存和发展至关重要。然而,供应链面临着诸多不确定因素,如自然灾害、政治动荡、市场波动等,这些因素都可能引发供应链中断&…

2026/11/4 21:07:30

Postgres bgworker

路径一:RegisterBackgroundWorker(静态注册) 入口:bgworker.c:871-943 调用方:在 shared_preload_libraries 加载的模块的 _PG_init() 函数中调用 调用流程 RegisterBackgroundWorker(worker) …

2026/11/7 12:29:16

济阳电工证报名不复习怎么过?考前押题救你忙中抽闲

济阳电工证报名不复习怎么过?考前押题救你忙中抽闲 工地太忙根本没时间复习考试,尤其是像我们这些一线工人,天天在工地上跑,哪还有心思去背那些理论知识?但偏偏电工证是必须的, 济阳电工证报名 不是你想考就能考的, 考前押题…

2026/11/7 12:29:16

灵宝市安监局电工证过期了怎么复审?含金量决定你能否继续干这行

灵宝市安监局电工证过期了怎么复审?含金量决定你能否继续干这行 证书过期了不知道怎么复审延期,这事儿真不是小事。很多电工朋友都在问,灵宝市安监局电工证到底怎么操作?含金量到底有没有水分?别急,下面我从实战角度给你讲透彻,让你看完就能动手。…

2026/11/7 12:29:16

唐河哪里有办电工证 内部消息教你避开报名陷阱

唐河哪里有办电工证 内部消息教你避开报名陷阱 你是不是也像很多人一样, 不知道去哪报名怕被中介坑 ?现在网上各种培训机构、代办公司五花八门,真假难辨。特别是像【唐河哪里有办电工证】这样的关键词,搜索出来的信息更是鱼龙混杂。今天就来…

2026/11/7 12:29:16

通河县电工证叉车证怎么考?官方报名入口在哪?外省证能转吗

通河县电工证叉车证怎么考?官方报名入口在哪?外省证能转吗 之前考的证在外省能不能转过来?你不是一个人,我刚接手漯河那边的学员咨询,就遇到十几个问这个事的。说实话,现在跨省工作是常态,但证书怎么转、怎么考、怎么用,很多人心里没底。特别是【通河…

2026/11/7 12:24:16

安监局电工证分级不?学历不高怕报不上名?值不值得考?

安监局电工证分级不?学历不高怕报不上名?值不值得考? 你是不是也这样想: 学历不高,怕报不上名 ?安监局电工证分级不?是不是只有那些有高学历或者有经验的人才能考?其实不然,很多人和你一样,可能连“电工证分级不”这个说法都搞不懂,更别提报名了…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑