96SEO 2026-02-19 23:07 0
。

数据存储形式为键值对#xff0c;键的类型为字符串型#xff0c;值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。
用户首选项为应用提供Key-Value键值型的数据处理能力支持应用持久化轻量级数据并对其修改和查询。
数据存储形式为键值对键的类型为字符串型值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。
9开始支持。
后续版本的新增接口采用上角标单独标记接口的起始版本。
首选项无法保证进程并发安全会有文件损坏和数据丢失的风险不支持在多进程场景下使用。
对于前端的朋友可能使用像uni-app、小程序或web端中的本地持久化API习惯了也能像使用sessionStorage或localStorage一样便捷。
我们也可以利用HarmonyOS中API提供的用户首选项的功能来实现LocalStorage实例。
上述说明了用户首选项只能存储数字型、字符型、布尔型这3种数据类型在对Preference实例封装过程中在基础上再增加对json对象数据存储能力并且实现数据缓存具有时效性等功能。
获取Preferences实例使用Promise异步回调当然获取实例方法也可以使用callback异步回调。
preferences.getPreferences(context,
参数名类型是否必填描述contextContext是应用上下文。
namestring是Preferences实例的名称。
callbackAsyncCallbackPreferences是回调函数。
当获取Preferences实例成功err为undefined返回Preferences实例否则err为错误对象。
这些操作通常都是异步的因此你需要使用Promise或者async/await来处理异步逻辑。
AsyncCallbackValueTypevoid从缓存的Preferences实例中获取键对应的值如果值为null或者非默认值类型返回默认数据defValue。
getAll()callback:
AsyncCallbackObjectvoid从缓存的Preferences实例中获取所有键值数据。
put()key:
AsyncCallbackvoidvoid将数据写入缓存的Preferences实例中可通过flushflush将Preferences实例持久化。
has()key:
AsyncCallbackbooleanvoid检查缓存的Preferences实例中是否包含名为给定Key的存储键值对。
delete()key:
AsyncCallbackvoidvoid从缓存的Preferences实例中删除名为给定Key的存储键值对可通过flush将Preferences实例持久化。
flush()callback:
AsyncCallbackvoidvoid将缓存的Preferences实例中的数据异步存储到用户首选项的持久化文件中。
clear()callback:
AsyncCallbackvoidvoid清除缓存的Preferences实例中的所有数据可通过flush将Preferences实例持久化。
ValueTypePromiseValueType从缓存的Preferences实例中获取键对应的值如果值为null或者非默认值类型返回默认数据defValuegetAll()/PromiseObject从缓存的Preferences实例中获取所有键值数据。
put()key:
ValueTypePromisevoid将数据写入缓存的Preferences实例中可通过flushflush将Preferences实例持久化has()key:
stringPromiseboolean检查缓存的Preferences实例中是否包含名为给定Key的存储键值对。
delete()key:
stringPromisevoid从缓存的Preferences实例中删除名为给定Key的存储键值对可通过flush将Preferences实例持久化。
flush()/Promisevoid将缓存的Preferences实例中的数据异步存储到用户首选项的持久化文件中。
clear()/Promisevoid清除缓存的Preferences实例中的所有数据可通过flush将Preferences实例持久化。
在封装LocalStorage类之前首先在ets目录下创建utils文件夹并且在该文件夹下创建LocalStorage类文件。
如下图
获取Preferences实例对象需要传入UIAbility组件的应用上下文可通过ohos.app.ability.common模块获取UIAbility类型并将其赋给context形参。
定义私有preference变量用于接收获取到的Preferences实例后期可以直接调用无需重复获取。
定义存储值类型vueType根据用户首选项描述已知其只能为number、string和boolean三种类型。
最后将LocalStorage类实例对象导出作为单例模式导出。
类定义好后在类体内定义initial()函数用来初始化并获取Preferences实例后期LocalStorage类中方法直接使用preference对象即可。
在获取Prefences实例时需要给实例命名这里则直接使用“应用上下文”的moduleName名称即您定义项目时取的模块名称。
代码如下
这里将UIAbility中应用上下文的moduleName作用为实例名称即该项目的applicationpreferences.getPreferences(context,
context.abilityInfo.moduleName).then(preference
将获取实例赋值给私有变量console.log(preference
这里使用Promise异步回调获取Preferences实例如果习惯使用async/await朋友可以将其简单修改下即可代码如下
这里将UIAbility中应用上下文的moduleName作用为实例名称即该项目的applicationtry
preferences.getPreferences(context,
context.abilityInfo.moduleName)}
当initial()函数定义好后我们将要在什么地方调用并初始化并且context:
common.UIAbilityContext中的应用上下文在哪获取
我们可以在项目中打开Ability文件会发现该类是继承UIAblity所以该类也继承了父类的context应用上下文onCreate()函数优先于页面之前所以将initial()放到该方法中即可并且通过this可直接过去context将其放到initial()方法参数中。
如果有朋友还在疑虑类中是否存在context问题可以打开UIAblity模块可以看到其类中定义了context变量如下图
ApplicationAblity继承了UIAbility所以我们在类中可以直接调用到context应用上下文。
代码如下
初始化本地存储LocalStorage.initial(this.context)}//
当LocalStorage类中initial()函数执行后单例对象中的preferences实例也成功创建并且初始化。
注如果你的Ability文件是ts文件将其后缀改为ets即可因为ets文件无法引入ts文件。
此时我们在首页中引入LocalStorage实例完成对数据的增、删、改、查等操作。
打开pages/index.ets添加一些相关操作功能按钮代码如下
-).fontSize(50).fontWeight(FontWeight.Bold)}.width(100%).height(150vp)Row(){//
{})}.width(100%).justifyContent(FlexAlign.Center)}.width(100%)}.height(100%).alignItems(VerticalAlign.Top)}
打开utils\LocalStorage.ets文件在类中添加put()函数增加添加数据功能前面执行initial()方法时Preferences实例已初始过了所以在类中函数直接调用即可并且当通过Preferences实例成功添加数据后需要调用flush()函数刷新下。
代码如下
this.preference.flush()).catch(e
点击添加按钮后数据则通过Preferences实例保存到本地页面呈现添加数据。
如下图
有些朋友可能喜欢使用async/await写法只需简单修改下即可。
utils/LocalStorage.ets文件中代码修改如下
获取比较简单了打开utils/LocalStorage.ets文件在类中增加获取数据功能。
这里get()函数中第二个默认值给空即可代码如下
在首页获取数据事件中添加getValue()函数获取缓存的数据。
代码如下
{localStorage.getValue(indexValue).then(value
修改数据直接使用put()函数将数据重置即可。
也可以LocalStorage类中添加update()函数判断传入的内容与上次缓存一致则不执行Preferences实例中put()方法。
打开utils\LocalStorage.ets文件在类中添加update()方法
移除指定数据则通过Preferences实例中的delete()函数打开utils\LocalStorage.ets文件代码如下
{this.preference.delete(key).then(()
this.preference.flush()).catch(e
打开pages\index.ets文件在删除事件中添加移除功能然后再通过get()函数重新获取本地存储的indexValue内容代码如下
移除indexValue键对应的值localStorage.remove(indexValue)//
localStorage.getValue(indexValue)this.renderMsg(delete:
清空数据则是将当前Preferences实例中装饰所有键-值对内容进行清空代码如下
{this.preference.clear().then(()
this.preference.flush()).catch(e
结构的JSON对象数据则需要在put()函数中将其转换为string类型数据再将其进行保存在获取时候在getValue()方法中识别并将其转换为JSON对象模式。
首先打开utils/utils.ets在该文件中添加判断字符串数据是否为object对象的函数如果你的项目中未创建该文件创建它即可。
代码如下
打开utils/LocalStorage.ets文件先修改put()函数让其支持存储json对象数据代码如下
如果数据为object类型将其转换为字符串类型数据进行存储if(object
JSON.stringify(value)}this.preference.put(key,
this.preference.flush()).catch(e
在修改getValue()函数时使用async/await写法当示例显示更为简洁代码如下
判断如果为字符串类型数据并且为JSON对象格式数据将其转换为对象if(string
当上述代码完成后在添加按钮事件位置将之前存储number数据更改为json数据进行存储再来看看效果。
JSON.stringify(testData))console.log(testTag
有时某些数据需要在规定时间内才有效这则需要对存储数据增加时效性的能力即在存储数据过程中添加失效的时间并在获取时判断是否在有效期内这样所有保存的数据将都需要转化为JSON对象格式的字符串进行存储。
首先我们将之前LocalStorage.ets文件拷贝份在之前基础上将其改造增加时效性能力。
如下图
在修改存储方式前需要定义json格式对象类型在put()函数中存储前和getValue()函数中获取结果通过JSON.parse转换后的数据都需要该类型进行约束。
当put()方法中添加失效时间expire时则将其合并到JSON数据中一起存储如果无expire失效时间则传入-1表示此数据长久有效除非主动清除。
e)return}this.preference.put(key,
this.preference.flush()).catch(e
在getValue()函数中在获取数据时除了需要将字符串数据转换为JSON格式对象外还需判断其中expire字段当前存储内容是否在有效期内在有效期内则返回不在则则返回空null。
首页判断key值是否存在不存在返回空if(!this.preference.has(key))
判断如果为字符串类型数据并且为JSON对象格式数据将其转换为对象if(string
如果当前存储内容无时效性或者在时效期内都直接返回if(data.expire
通过Promise异步回调将结果返回(如果内容不为JSON格式对象或者过了时效期返回null)return
需要注意的是我们将需要applicationAbility.ets和index.ets中的导入模块进行修改否则引入还是之前LocalStorage.ets中类刚非新创建的LocalStorageObj.ets。
以上两个函数修改完成后我们来执行下看看结果。
打开pages/index.ets在添加事件中增加数据缓存的时效性。
保存一个失效10分钟的日期expireDate.setMinutes(expireDate.getMinutes()
存储数据localStorage.put(indexValue,
JSON.stringify(testData))console.log(testTag
testData)})Button(读取).onClick(()
{localStorage.getValue(indexValue).then(value
页面效果可见添加了json数据后获取结果为null这是因为在添加时将日期设置为失效10分钟了。
如下图
设置为24小时后失效expireDate.setHours(expireDate.getHours()
存储数据localStorage.put(indexValue,
JSON.stringify(testData))console.log(testTag
testData)})Button(读取).onClick(()
{localStorage.getValue(indexValue).then(value
utils/LocalStorageObj.ets文件代码如下
这里将UIAbility中应用上下文的moduleName作用为实例名称即该项目的applicationpreferences.getPreferences(context,
context.abilityInfo.moduleName).then(preference
当数据转换成功将其存储console.log(testTag,
e)return}this.preference.put(key,
this.preference.flush()).catch(e
首页判断key值是否存在不存在返回空if(!this.preference.has(key))
判断如果为字符串类型数据并且为JSON对象格式数据将其转换为对象if(string
JSON.parse(value)console.log(testTag,
如果当前存储内容无时效性或者在时效期内都直接返回if(data.expire
通过Promise异步回调将结果返回(如果内容不为JSON格式对象或者过了时效期返回null)return
{this.preference.delete(key).then(()
this.preference.flush()).catch(e
{this.preference.clear().then(()
this.preference.flush()).catch(e
-).fontSize(30).fontWeight(FontWeight.Bold)}.width(100%).height(150vp)Row(){//
设置为24小时后失效expireDate.setHours(expireDate.getHours()
存储数据localStorage.put(indexValue,
JSON.stringify(testData))console.log(testTag
testData)})Button(读取).onClick(()
{localStorage.getValue(indexValue).then(value
err)})})Button(删除).onClick(async
{localStorage.remove(indexValue)const
localStorage.getValue(indexValue)this.renderMsg(delete:
{})}.width(100%).justifyContent(FlexAlign.Center)}.width(100%)}.height(100%).alignItems(VerticalAlign.Top)}
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback