HarmonyOS--数据持久化

用户首选项

场景介绍

1、用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。

2、Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据

3、当需要持久化时可以使用flush接口将内存中的数据写入持久化文件中。

4、Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据,也不支持通过配置加密,适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等

运作机制

如图所示,用户程序通过ArkTS接口调用用户首选项读写对应的数据文件。开发者可以将用户首选项持久化文件的内容加载到Preferences实例,每个文件唯一对应到一个Preferences实例,系统会通过静态容器将该实例存储在内存中,直到主动从内存中移除该实例或者删除该文件。

存储约束限制

 1、Key键为string类型,要求非空且长度不超过80个字节。

 2、如果Value值为string类型,请使用UTF-8编码格式,可以为空,不为空时长度不超过8192个字节。

 3、内存会随着存储数据量的增大而增大,所以存储的数据量应该是轻量级的,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。键值型数据库

接口说明

1、获取Preferences实例,存在异步接口

getPreferencesSync(context: Context, options: Options): Preferences

参数

context: 当前上下文

options: 存储数据

调用者:preferences

2、将数据写入Preferences实例,通过flush刷盘实现持久化,存在异步接口

putSync(key: string, value: ValueType): void

参数

key:存储的键

value:存储的值

调用者:Preferences实例

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

flush(callback: AsyncCallback<void>): void

参数

callback:处理刷盘结果的回调

调用者:Preferences实例

3、检查Preferences实例是否包含名为给定Key的存储键值对。给定的Key值不能为空。该接口存在异步接口。

hasSync(key: string): void

参数

key:查询的键

调用者

Preferences实例

4、获取键对应的值,如果值为null或者非默认值类型,返回默认数据defValue。该接口存在异步接口。

getSync(key: string, defValue: ValueType): void

参数

key:获取的键

defValue:如果获取的键没有值,使用默认值

调用者

Preferences实例

5、从Preferences实例中删除名为给定Key的存储键值对。该接口存在异步接口。

deleteSync(key: string): void

参数

key:删除的键

调用者

Preferences实例

6、订阅数据变更,订阅的数据发生变更后,在执行flush方法后,触发callback回调。

on(type: 'change', callback: Callback<string>): void

参数

callback:应用订阅数据变更需要指定回调方法

调用者

Preferences实例

7、取消订阅数据变更。

off(type: 'change', callback?: Callback<string>): void

参数

callback:应用订阅数据变更的回调方法

调用者

Preferences实例

8、从内存中移除指定的Preferences实例。若Preferences实例有对应的持久化文件,则同时删除其持久化文件。

deletePreferences(context: Context, options: Options, callback: AsyncCallback<void>): void

参数

context:删除的上下文

options:删除实例的数据

callback:删除对应的实例

调用者

Preferences实例

用户首选项基本使用

// 引入preferences
import preferences from '@ohos.data.preferences';class PreferencesUtil{prefMap: Map<string, preferences.Preferences> = new Map()// 获取Preferences实例async loadPreference(context, name: string){try { // 加载preferenceslet pref = await preferences.getPreferences(context, name)this.prefMap.set(name, pref)console.log('testTag', `加载Preferences[${name}]成功`)} catch (e) {console.log('testTag', `加载Preferences[${name}]失败`, JSON.stringify(e))}}async putPreferenceValue(name: string, key: string, value: preferences.ValueType){if (!this.prefMap.has(name)) {console.log('testTag', `Preferences[${name}]尚未初始化!`)return}try {let pref = this.prefMap.get(name)// 写入数据await pref.put(key, value)// 刷盘await pref.flush()console.log('testTag', `保存Preferences[${name}.${key} = ${value}]成功`)} catch (e) {console.log('testTag', `保存Preferences[${name}.${key} = ${value}]失败`, JSON.stringify(e))}}async getPreferenceValue(name: string, key: string, defaultValue: preferences.ValueType){if (!this.prefMap.has(name)) {console.log('testTag', `Preferences[${name}]尚未初始化!`)return}try {let pref = this.prefMap.get(name)// 读数据let value = await pref.get(key, defaultValue)console.log('testTag', `读取Preferences[${name}.${key} = ${value}]成功`)return value} catch (e) {console.log('testTag', `读取Preferences[${name}.${key} ]失败`, JSON.stringify(e))}}
}const preferencesUtil = new PreferencesUtil()export default preferencesUtil as PreferencesUtil

键值型数据库

关系型数据库

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模型情景制作-制作一棵树

情景模型中&#xff0c;最常用到的也是最能提升情景中生气的就是树。然而&#xff0c;自然的生长和环境的影响使得树的制作变成了考验制作者观察力的一道考题。制作一棵逼真的树&#xff0c;我们可以参考下面的这种方法。 铁丝制树 您需要准备9—12根铁丝&#xff0c;每根的长…

SuperCopy解决文档不能复制问题

有一些文档&#xff0c;我们要使用时&#xff0c;总是面临收费的情况&#xff0c;让我们不能复制&#xff0c;让人头疼不已&#xff01;&#xff01;&#xff01; SuperCopy就可以解决这个问题。 获取SuperCopy步骤 1. 打开浏览器&#xff0c;点击右上角的三个点 2. 找到扩…

老板电器 45 年的烹饪经验,浓缩在这款烹饪大模型中

在科技不断进步的时代&#xff0c;人工智能&#xff08;AI&#xff09;迅速成为推动各行各业发展的重要力量。家电行业也不例外&#xff0c;根据 Gartner 的报告预测&#xff0c;到 2024 年&#xff0c;AI 家电市场的规模将达到万亿美元级别。这一预估凸显了智能化在家电行业中…

网络安全 DVWA通关指南 Cross Site Request Forgery (CSRF)

DVWA Cross Site Request Forgery (CSRF) 文章目录 DVWA Cross Site Request Forgery (CSRF)DVWA Low 级别 CSRFDVWA Medium 级别 CSRFDVWA High 级别 CSRFDVWA Impossible 级别 CSRF CSRF是跨站请求伪造攻击&#xff0c;由客户端发起&#xff0c;是由于没有在执行关键操作时&a…

【黑龙江哪些行业需要做等保?】

黑龙江等保测评是衡量企业网络安全水平的一项主要指标&#xff0c;包括&#xff1a;金融&#xff0c;能源&#xff0c;电信&#xff0c;医疗&#xff0c;教育&#xff0c;交通&#xff0c;制造&#xff0c;电商等。 等保测评是黑龙江省信息化建设的重要组成部分&#xff0c;也…

旅游管理系统源码小程序

便捷旅行&#xff0c;尽在掌握 旅游管理系统是一款基于FastAdminElementUNIAPP开发的多端&#xff08;微信小程序、公众号、H5&#xff09;旅游管理系统&#xff0c;拥有丰富的装修组件、多端分享、模板消息、电子合同、旅游攻略、旅游线路及相关保险预订等功能&#xff0c;提…

1961 Springboot自习室预约系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 自习室预约管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库…

大型企业组网如何规划网络

大型企业组网是一个复杂的过程&#xff0c;它需要细致的规划和设计&#xff0c;以确保网络能够满足企业的业务需求&#xff0c;同时保证性能、安全性和可扩展性。以下是规划大型企业网络的一些关键步骤和考虑因素&#xff1a; 1. 需求分析 业务需求&#xff1a;与各个业务部门…

EWM学习之旅-1-EWM100

系统学习一个业务模块已经变得越来越重要&#xff0c;开始吧&#xff0c;EWM&#xff01; EWM的Learning Journey中包括7本 ebook,100/110/115/120/125/130/140&#xff0c;一本一本的啃吧&#xff0c;相信很多内容是重复的。 EWM100很适合初学者&#xff0c;了解概念术语&…

Lesson 40 What are you going to do?

Lesson 40 What are you going to do? 词汇 show v. 展示&#xff0c;展出 搭配&#xff1a;show人东西    show东西to人 口语&#xff1a;Show me your hands! 拿出来&#xff01; n. 秀&#xff0c;表演 搭配&#xff1a;talk show 脱口秀    show room 展厅 take v…

精益生产推进时如何营造持续变革的氛围?

在快速变化的市场环境中&#xff0c;企业如何保持竞争力&#xff1f;精益生产无疑为众多企业提供了一个强大的战略工具。但是&#xff0c;单纯的引入精益生产理念和方法并不能保证企业的持续成功。关键在于如何营造一种持续变革的氛围&#xff0c;让精益生产成为推动企业不断前…

智慧校园-宿舍管理系统总体概述

在教育信息化的不断推动下&#xff0c;智慧校园宿舍管理系统脱颖而出&#xff0c;它以一种全新的视角和方式&#xff0c;重塑了高校宿舍管理的传统模式。该系统深度融合了云计算、物联网、大数据等先进科技&#xff0c;旨在为学生提供一个既安全可靠又充满便捷与温馨的居住体验…

Node.js全栈指南:认识MIME和HTTP

MIME&#xff0c;全称 “多用途互联网邮件扩展类型”。 这名称相当学术&#xff0c;用人话来说就是&#xff1a; 我们浏览一个网页的时候&#xff0c;之所以能看到 html 文件展示成网页&#xff0c;图片可以正常显示&#xff0c;css 样式能正常影响网页效果&#xff0c;js 脚…

Arduino - 电磁锁

Arduino - Electromagnetic Lock Arduino - 电磁锁 The electromagnetic lock (EM lock) is widely used to lock the door. It is usually used with switch, fingerprint reader, RFID/NFC reader, keypad, or application on PC/mobille to control access to door, buid…

气膜体育馆对高度的要求—轻空间

在现代体育场馆的建设中&#xff0c;气膜体育馆以其独特的优势&#xff0c;逐渐成为人们关注的焦点。不同于传统的钢筋混凝土结构&#xff0c;气膜体育馆以其轻盈、灵活、环保的特点&#xff0c;为人们带来了全新的体育体验。在设计与建设气膜体育馆时&#xff0c;高度是一个关…

爬虫是什么?

目录 1.什么是互联网爬虫&#xff1f; 2.爬虫核心? 3.爬虫的用途? 4.爬虫分类&#xff1f; 5.反爬手段&#xff1f; 1.什么是互联网爬虫&#xff1f; 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那一台计算机上的数据便是蜘蛛网上的一个猎物&#xff0c;而爬虫程序…

Hadoop简单应用程序实例

Hadoop是一个分布式系统基础架构&#xff0c;主要用于大数据的存储和处理。它允许使用简单的编程模型跨集群处理和生成大数据集。Hadoop主要由HDFS&#xff08;Hadoop Distributed FileSystem&#xff0c;分布式文件系统&#xff09;和MapReduce编程模型两部分组成。 准备工作…

第十节 动态面板实现推动和拉动效果

在原型设计中我们经常会遇到元件使用显示更多或者收起效果,下面以面板元件推动与拉动效果做案件说明。 一、设置原有内容 我这里添加一个表格内容,添加“显示更多”文本超链接 二、设置在更多显示面板内容 添加一个动态面板,设置有内容、无内容两个状态 在有内容面板中添…

TEMU半托管模式引领跨境电商新风尚

TEMU半托管模式作为2024年的热门话题&#xff0c;正吸引着越来越多卖家的目光。继全托管模式取得巨大成功之后&#xff0c;半托管模式的推出无疑为跨境电商行业注入了新的活力。 在选品方向上&#xff0c;TEMU半托管模式强调商品的聚焦与精选。卖家在选择上架商品时&#xff0c…

python AI全栈工程师

python AI全栈工程师 前端&#xff1a;Streamlit Streamlit是一个开源的Python库&#xff0c;专为数据科学家和机器学习工程师设计&#xff0c;用于快速构建交互式用户界面。Streamlit功能强大、易于使用&#xff0c;特别适合数据科学家和机器学习工程师快速构建和部署交互式数…