首页 > 其他分享 >鸿蒙+next+封装轻量级缓存工具PreferencesUtil

鸿蒙+next+封装轻量级缓存工具PreferencesUtil

时间:2024-12-18 09:24:14浏览次数:4  
标签:preferences param next static PreferencesUtil key 轻量级 string

鸿蒙 next 封装轻量级缓存工具PreferencesUtil

import preferences from '@ohos.data.preferences';
import dataPreferences from '@ohos.data.preferences';
import { AppUtil } from './AppUtil';


type PreferencesValue = string

/**
 * preferences 轻量级缓存工具
 */
export class PreferencesUtil {
  private constructor() {
  }

  private static defaultPreferenceName: string = "myPreferences";
  private static preferences: preferences.Preferences;

  /**
   * 获取Preferences实例
   * @param name
   * @returns
   */
  private static getPreferencesSync(): preferences.Preferences {
    if (!PreferencesUtil.preferences) {
      PreferencesUtil.preferences =
        dataPreferences.getPreferencesSync(AppUtil.getContext(), { name: PreferencesUtil.defaultPreferenceName });
    }
    return PreferencesUtil.preferences;
  }

  /**
   * 获取Preferences实例
   * @param name
   * @returns
   */
  private static async getPreferences(): Promise<preferences.Preferences> {
    if (!PreferencesUtil.preferences) {
      PreferencesUtil.preferences =
        await dataPreferences.getPreferences(AppUtil.getContext(), PreferencesUtil.defaultPreferenceName);
    }
    return PreferencesUtil.preferences;
  }


  /**
   * 将数据缓存
   * @param key
   * @param value
   */
  static putSync(key: string, value: PreferencesValue) {
    let preferences = PreferencesUtil.getPreferencesSync(); //获取实例
    preferences.putSync(key, value);
    preferences.flush(); //此处一定要flush,要不然不能永久序列化到本地
  }

  /**
   * 将数据缓存
   * @param key
   * @param value
   */
  static async put(key: string, value: PreferencesValue) {
    let preferences = await PreferencesUtil.getPreferences(); //获取实例
    await preferences.put(key, value);
    await preferences.flush(); //此处一定要flush,要不然不能永久序列化到本地
  }


  /**
   * 获取缓存值
   * @param key
   * @param defValue
   * @returns
   */
  static getSync(key: string, defValue: PreferencesValue): PreferencesValue {
    let preferences = PreferencesUtil.getPreferencesSync(); //获取实例
    return preferences.getSync(key, defValue) as PreferencesValue;
  }

  /**
   * 获取缓存值
   * @param key
   * @param defValue
   * @returns
   */
  static async get(key: string, defValue: PreferencesValue): Promise<PreferencesValue> {
    let preferences = await PreferencesUtil.getPreferences(); //获取实例
    return preferences.get(key, defValue) as Promise<PreferencesValue>;
  }

  static getAllSync() {
    let preferences = PreferencesUtil.getPreferencesSync(); //获取实例
    return preferences.getAllSync();
  }


  /**
   * 获取string类型的缓存值
   * @param key
   * @returns
   */
  static getStringSync(key: string): string {
    return PreferencesUtil.getSync(key, "") as string;
  }

  /**
   * 获取string类型的缓存值
   * @param key
   * @returns
   */
  static async getString(key: string): Promise<string> {
    return (await PreferencesUtil.get(key, "")) as string;
  }


  /**
   * 检查缓存的Preferences实例中是否包含名为给定Key的存储键值对
   * @param key
   * @returns
   */
  static hasSync(key: string) {
    return PreferencesUtil.getPreferencesSync().hasSync(key);
  }

  /**
   * 检查缓存的Preferences实例中是否包含名为给定Key的存储键值对
   * @param key
   * @returns
   */
  static async has(key: string) {
    let preferences = await PreferencesUtil.getPreferences(); //获取实例
    return await preferences.has(key);
  }


  /**
   * 删除缓存值
   * @param key
   * @returns
   */
  static deleteSync(key: string) {
    let preferences = PreferencesUtil.getPreferencesSync(); //获取实例
    preferences.deleteSync(key);
    preferences.flush() //此处一定要flush,要不然不能永久序列化到本地
  }

  /**
   * 删除缓存值
   * @param key
   * @returns
   */
  static async delete(key: string) {
    let preferences = await PreferencesUtil.getPreferences(); //获取实例
    await preferences.delete(key);
    return await preferences.flush() //此处一定要flush,要不然不能永久序列化到本地
  }


  /**
   * 清空缓存的Preferences实例中的所有数据
   * @returns
   */
  static clearSync() {
    let preferences = PreferencesUtil.getPreferencesSync(); //获取实例
    preferences.clearSync();
    preferences.flush() //此处一定要flush,要不然不能永久序列化到本地
  }

  /**
   * 清除缓存的Preferences实例中的所有数据
   * @returns
   */
  static async clear() {
    let preferences = await PreferencesUtil.getPreferences(); //获取实例
    await preferences.clear();
    return await preferences.flush() //此处一定要flush,要不然不能永久序列化到本地
  }
}

// export default new PreferencesUtil();

用法

1.存储数据


PreferencesUtil.putSync("mykey", "myvalue")

2.获取数据


PreferencesUtil.getStringSync("mykey")

标签:preferences,param,next,static,PreferencesUtil,key,轻量级,string
From: https://www.cnblogs.com/hongmengos/p/18613870

相关文章

  • HarmonyOS NEXT基础入门
    基础入门储存鸿蒙应用提供多种数据存储方式,包括:Preferences:轻量级数据存储,适用于简单键值对。SQLite:关系型数据库,适用于结构化数据存储。文件存储:通过文件系统直接存储数据。数组数组是一组有序的数据集合,可以通过索引访问每个元素。letnumbers=[1,2,3,4,5];con......
  • 鸿蒙Next创建自定义组件总结
    一、引言在鸿蒙Next开发中,自定义组件是构建高效、可维护UI的重要组成部分。它具有可组合、可重用以及数据驱动UI更新等特点,能帮助开发者更好地实现代码复用、业务逻辑与UI分离等目标。本文将详细总结创建自定义组件的相关知识,包括其基本结构、成员函数/变量、参数规定、build()函......
  • 搭建企业NextCloud并集成ONLYOFFICE
    部署安装1.1离线安装​ 使用能够安全拉取nextcloud镜像的服务器拉取镜像并打包成tar.gz通过sftp传输到准备好的部署服务器,这里使用的版本为aliyun镜像源拉去的latest版本如下[root@VM-12-10-centos~]#dockerimageinspectnextcloud:latest|grep-iversion"Dock......
  • VS code轻量级开发平台配置(C/C++版)
    写c++代码一直用VS,后来发现太麻烦了,转站vs code。按照步骤安装,问题不大。我也是跟着一个博主学习安装的,一起学习。一、VS code下载下载链接:DownloadVisualStudioCode-Mac,Linux,Windows对应选择适合自己电脑的版本,安装路径自定义时不要包含中文字符,其他的直接下一......
  • Fleck:一个轻量级的C#开源WebSocket服务端库
    推荐一个简单易用、轻量级的C#开源WebSocket服务端库,方便我们快速实现WebSocket的开发。01项目简介Fleck是一个用C#编写的轻量级WebSocket服务器库。它提供了一个简单而直观的API,使得开发者可以轻松地在他们的应用程序中集成WebSocket功能,比如一些常见的实时通信应用,在......
  • 鸿蒙Next数据懒加载LazyForEach用法总结
    在鸿蒙Next开发中,LazyForEach提供了高效的数据懒加载机制,适用于处理大量数据的列表展示等场景,可有效提升性能和内存管理。以下是其详细用法总结。一、使用限制容器组件要求:必须在特定容器组件(List、Grid、Swiper、WaterFlow)内使用,且这些组件支持配置cachedCount属性实现按需加......
  • 鸿蒙Next循环渲染ForEach用法总结
    在鸿蒙Next开发中,ForEach接口用于循环渲染数组类型数据,与容器组件配合使用,可高效构建动态列表等UI元素。以下是ForEach用法的详细总结。一、键值生成规则系统默认规则:若开发者未定义keyGenerator函数,ArkUI框架使用默认函数(item:Object,index:number)=>{returnindex+'......
  • 鸿蒙Next条件渲染用法总结
    在鸿蒙Next开发中,ArkTS提供了强大的渲染控制能力,其中条件渲染(if/else)可根据应用不同状态显示相应UI内容。以下是对其用法的详细总结。一、使用规则1.语句支持支持if、else和elseif语句,可灵活构建条件判断逻辑。2.变量类型if、elseif后的条件语句可使用状态变量(值改变实时......
  • Containerd容器管理工具(轻量级、工业容器管理工具)
    一、Containerd介绍前言早在2016年3月,Docker1.11的DockerEngine里就包含了containerd,而现在则是把containerd从DockerEngine里彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在DockerEngine里containerd相比......
  • 鸿蒙Next合理使用状态管理总结
    在使用鸿蒙Next进行开发时,合理的状态管理对于优化UI性能和提升用户体验至关重要。许多开发者由于对状态管理特性了解不足,常遇到UI不刷新或刷新性能差的问题。本文将从合理使用属性、合理使用ForEach/LazyForEach等方面进行总结,帮助开发者掌握合理使用状态管理的方法。一、合理使......