当前位置: 首页 > news >正文

Preferences首选项存储工具类(Harmony OS)

前言:公司最近Android项目趋于运维状态,目前在跟架构组一起封装鸿蒙框架。今天先把首选项存储工具类整理出来,后续鸿蒙工具类在做补充。废话不多说上源码!!!

工具类源码如下:

import preferences from '@ohos.data.preferences'
/*** @auther:jsxin* email:jsxin0816@163.com* date: 2024/8/9* desc: 首选项存储:key-value键值对增删改查*/
class PreferencesUtils {private preferences?: preferences.Preferences/*** 初始化Preferences对象(同步写法async/await)* @param context 上线文* @param preferenceName 首选项文件名称*/async initPreferences(context, preferencesName: string = 'preferences_data_store') {console.debug('initPreferences() preferenceName = ' + preferencesName)try {this.preferences = await preferences.getPreferences(context, preferencesName)} catch (err) {console.debug('initPreferences() err.code = ' + err.code + '  err.message = ' + err.message)}}/*** 保存数据:key value键值对* @param key 键* @returns value 值*/async putValue(key: string, value: preferences.ValueType) {if (!this.preferences) {console.debug('Preferences--->>>[putValue] Preferences实例为空')return}try {await this.preferences.put(key, value)await this.preferences.flush()} catch (err) {console.debug('Preferences--->>>[putValue]:err.code = ' + err.code + 'err.message = ' + err.message)}}/*** 根据key获得value* @param key 键* @returns value 值*/async getValue(key: string, defaultValue: preferences.ValueType = '') {if (!this.preferences) {console.debug('Preferences--->>>[getValue] Preferences实例为空')return}//在typescript中,空字符串、数字0、null、undefined都被认为是false,其他值为trueif (!key) {return defaultValue}try {return await this.preferences.get(key, defaultValue)} catch (err) {console.debug('Preferences--->>>[getValue]:err.code = ' + err.code + 'err.message = ' + err.message)}}/*** 保存数据:key value键值对集合(多数据集合存储)* @param valueMap 数据集合*/async putValueByMap(valueMap: Map<string, preferences.ValueType>) {if (!this.preferences) {console.debug('Preferences--->>>[putValueByMap] Preferences实例为空')return}if (!valueMap || valueMap.size === 0) {console.debug('Preferences--->>>[putValueByMap]:传入集合数据为空或未初始化')return}try {for (const entry of valueMap.entries()) {const key = entry[0]const value = entry[1]await this.preferences.put(key, value)}this.preferences.flush()} catch (err) {console.debug('Preferences--->>>[putValueByMap]:err.code = ' + err.code + 'err.message = ' + err.message)}}/*** 根据key删除value* @param key key*/async deleteByKey(key: string) {if (!this.preferences) {console.debug('Preferences--->>>[deleteByKey] Preferences实例为空')return}try {await this.preferences.delete(key)await this.preferences.flush()} catch (err) {console.debug('Preferences--->>>[deleteByKey]:err.code = ' + err.code + 'err.message = ' + err.message)}}/*** 清空全部数据*/async deleteAllDatas() {if (!this.preferences) {console.debug('Preferences--->>>[deleteAllDatas] Preferences实例为空')return}try {await this.preferences.clear()await this.preferences.flush()} catch (err) {console.debug('Preferences--->>>[deleteAllDatas]:err.code = ' + err.code + 'err.message = ' + err.message)}}
}const preferencesUtils = new PreferencesUtils()export default preferencesUtils as PreferencesUtils

用法:

1、推荐在EntryAbility中进行初始化,如下:

//1、导入依赖
import PreferencesUtils from '../store/PreferencesUtils'export default class EntryAbility extends UIAbility {onCreate(want, launchParam) {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');//2、全局初始化PreferencesPreferencesUtils.initPreferences(this.context.getApplicationContext())}

2、在使用的界面进行引入,如下:

//1、包导入
import PreferencesUtils  from '../store/PreferencesUtils'
@Entry
@Component
struct Index {aboutToAppear(){//2、使用PreferencesUtils.putValue('name','张三')}

如有问题或建议欢迎指正!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【实现100个unity特效之12】Unity中的冲击波 ——如何使用ShaderGraph制作一个冲击波着色器
  • 实时数据监控,三防平板在工业领域的应用解析
  • Unity补完计划 之 Mask SortingGroup
  • 哈尔滨等保测评——为工业网络安全保驾护航新航标
  • 【康复学习--LeetCode每日一题】3131. 找出与数组相加的整数 I
  • [ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题
  • 企元数智突破超竞争时代:借力欧赛斯,实现商业辉煌
  • [Modbus] Modbus协议开发-基本概念(一)
  • 迭代次数顺序的双重性
  • leetCode- - - 链表
  • 工业设备数据采集方案的设计实施与应用-天拓四方
  • Redis--缓存击穿、缓存穿透、缓存雪崩
  • 21-原理图的可读性的优化处理
  • 【DataKit系列】数据迁移-实例搭建步骤(二)
  • 使用GCC编译Notepad++的插件
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • exif信息对照
  • JavaScript设计模式之工厂模式
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • leetcode-27. Remove Element
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Median of Two Sorted Arrays
  • Mybatis初体验
  • mysql常用命令汇总
  • oschina
  • Python进阶细节
  • sublime配置文件
  • TypeScript实现数据结构(一)栈,队列,链表
  • 电商搜索引擎的架构设计和性能优化
  • 番外篇1:在Windows环境下安装JDK
  • 工作中总结前端开发流程--vue项目
  • 基于组件的设计工作流与界面抽象
  • 日剧·日综资源集合(建议收藏)
  • 为什么要用IPython/Jupyter?
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​马来语翻译中文去哪比较好?
  • ​批处理文件中的errorlevel用法
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #微信小程序(布局、渲染层基础知识)
  • (1)(1.13) SiK无线电高级配置(五)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 未来三学期想要修的课 (日記)
  • (转)VC++中ondraw在什么时候调用的
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算