鸿蒙HarmonyOS开发 preferences首选项

2024-06-13 09:44

本文主要是介绍鸿蒙HarmonyOS开发 preferences首选项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

引言

官方介绍

如何使用

完整示例

监听首选项变化

总结


引言

在鸿蒙开发中,不可避免的需要用到一些简单数据的持久化存储,今天就总结一下鸿蒙开发中的持久化存储库ohos.data.preferences (用户首选项),有过Android原生开发经验的同学会觉得很眼熟,这不就是android的SharePreferences嘛,先卖个关子,往下看

官方介绍

ohos.data.preferences (用户首选项)用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。

数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。

注意:Key的最大长度限制为80个字节,Value的最大长度限制为8192个字节。大概2000个字符左右的长度,如果数据多长建议使用文件或轻量型数据库来存储。

如何使用

1、引入ohos.data.preferences的库

import dataPreferences from '@ohos.data.preferences';

2、获取存储实例

//获取存储实例
let store = await dataPreferences.getPreferences(getContext(this), 'store');

3、通过get,put,delete等函数执行数据的 获取,存储,删除操作。

//读取存储值的时候必须提供默认值
await this.store.put('name', 'jay');
await this.store.delete('name');

4、将当前Preferences实例的数据异步存储到用户首选项的持久化文件中

是的,还有最后一步,当调用执行完flush函数,才算真正的将数据存储在用户首选项的持久化文件中。

 await this.store.flush();

完整示例

import dataPreferences from '@ohos.data.preferences';@Entry
@Component
struct PreferencesPage {store: any = {}async aboutToAppear() {//获取存储实例let store = await dataPreferences.getPreferences(getContext(this), 'store');}build() {Row() {Column({ space: 20 }) {Button('数据存储').onClick(async () => {await this.store.put('name', 'jay');//调用数据持久化await this.store.flush();console.log('Preferences:数据存储成功');})Button('读取数据').onClick(async () => {let data = await  this.store.get('name', '不能说的秘密');console.log('Preferences:数据读取成功:' + data);})Button('删除数据').onClick(async () => {await  this.store.delete('name');console.log('Preferences:数据删除成功');})}.width('100%')}.height('100%')}
}

重要:以上所有的函数调用包括获取存储实例,都必须异步调用,否则无法正确存储。

监听首选项变化

重点来了,Preferences为我们提供了,订阅和取消订阅监听首选项,如果我们需要监听某个值的更新,比如有这么一个场景,用户购买物品,需要先去地址列表选择一个地址,常规的做法可能是跳转回的时候吧数据再带回来,但是有了首选项监听我们就轻松很多。

在哪里使用,就在哪里监听:

import router from '@ohos.router'
import dataPreferences from '@ohos.data.preferences';@Entry
@Component
struct AddressPage {store: any = {}@State city: string = ''async aboutToAppear() {//获取存储实例this.store = await dataPreferences.getPreferences(getContext(this), 'store');//开启数据监测this.store.on('change', async key => {if (key == 'city') {//读取数据this.city = await this.store.get('city', '');console.log('Preferences:数据读取成功');}})}build() {Row() {Column() {Button(this.city || "请选择").onClick(() => {router.pushUrl({ url: 'pages/AddressListOptionsPage' });})}.width('100%')}.height('100%')}
}

存储数据的页面:

import router from '@ohos.router'
import dataPreferences from '@ohos.data.preferences';@Entry
@Component
struct AddressListOptionsPage {options: Array<string> = ['北京', '上海', '广州']store: any = {}async aboutToAppear() {//获取存储实例this.store = await dataPreferences.getPreferences(getContext(this), 'store');}build() {Row() {Column({ space: 20 }) {ForEach(this.options, (item) => {Button(item).onClick(async () => {await this.store.put('city', item);await this.store.flush();console.log('Preferences:数据存储成功');router.back();})})}.width('100%')}.height('100%')}
}

最后选中的结果成功展示在了按钮上。

总结

preferences首选项带给我最大的惊喜就是可以订阅更新,这个非常实用,我们不需要像以往在每个要用到值的地方更新了,我们只需要订阅on("change"),匹配到一样的键,就可以根据键将最新的值更新。

这篇关于鸿蒙HarmonyOS开发 preferences首选项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056944

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件