华为鸿蒙应用--封装数据持久化工具:首选项Preferences(鸿蒙工具)-ArkTs

news2025/1/19 11:30:27
一、使用方法:

0、初始化实例:一般在EntryAbility.ts的onWindowStageCreate中初始化;(可忽略)

1、将数据写入Preferences实例

function() {
  let arrayNum: number[] = [1, 2, 3];
  let arrayStr: string[] = ["5", "2", "3"];
  let arrayBoo: boolean[] = [true, false, true];
  var fruit: Fruit;
  fruit = new Fruit();
  fruit.fruitName = "Name";
  fruit.fruitNum = "Num";
  PFUtils.put("number", 10);
  PFUtils.put("string", "22");
  PFUtils.put("boolean", true);
  PFUtils.put("arrayNum", arrayNum);
  PFUtils.put("arrayStr", arrayStr);
  PFUtils.put("arrayBoo", arrayBoo);
  PFUtils.put("fruit", fruit)  // 自定义实体
  this.breakpointSystem.register();
  this.intervalId = setInterval(this.countdown, 1000);
}

2、获取键对应的值

function() {
  PFUtils.get("number").then((value: number) => {
    Logger.error(Constants.TAG, "number:" + value)
  })
  PFUtils.get("string").then((value: string) => {
    Logger.error(Constants.TAG, "string:" + value)
  })
  PFUtils.get("boolean").then((value: boolean) => {
    Logger.error(Constants.TAG, "boolean:" + value)
  })
  PFUtils.get("arrayNum").then((value: Array<number>) => {
    Logger.error(Constants.TAG, "Array<number>:" + value)
  })
  PFUtils.get("arrayStr").then((value: Array<string>) => {
    Logger.error(Constants.TAG, "Array<string>:" + value)
  })
  PFUtils.get("arrayBoo").then((value: Array<boolean>) => {
    Logger.error(Constants.TAG, "Array<boolean>:" + value)
  })
  PFUtils.getEntity("fruit").then((value: Fruit) => {
    Logger.error(Constants.TAG, "Fruit:" + value)
    Logger.error(Constants.TAG, "FruitName:" + value.fruitName)
    Logger.error(Constants.TAG, "FruitNum:" + value.fruitNum)
  })
}

3、其他方法:

        1、getAll:获取含有所有键值的Object对象。

        2、has:检查Preferences实例是否包含名为给定Key的存储键值对

        3、delete:从Preferences实例中删除名为给定Key的存储键值对

        4、flush:将当前Preferences实例的数据异步存储到用户首选项的持久化文件中(put中已生效)

        5、clear:清除此Preferences实例中的所有存储

二、完整代码:
import dataPreferences from '@ohos.data.preferences';
import { Constants, Logger } from '@ohos/common';

let preference: dataPreferences.Preferences;
let preferenceTemp: dataPreferences.Preferences;
let context = getContext(this);

export class PFUtils {
  /**
   * Read the specified Preferences persistence file and load the data into the Preferences instance.
   */
  static async getPreferences(context: Context) {
    try {
      preference = await dataPreferences.getPreferences(context, Constants.PREFERENCES_NAME);
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get preferences, Cause: ${err}`);
    }
  }

  /**
   * Deletes the specified Preferences persistence file from memory and removes the Preferences instance.
   */
  static async deletePreferences() {
    try {
      await dataPreferences.deletePreferences(context, Constants.PREFERENCES_NAME);
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to delete preferences, Cause: ${err}`);
    }
    preference = preferenceTemp;
  }

  /**
   * Save the data to the Preferences.
   *
   * @param data.
   */
  static async put(key: string, value: unknown) {
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      if (typeof value === "number") {
        await  preference.put(key, value);
      }
      if (typeof value === "string") {
        await  preference.put(key, value);
      }
      if (typeof value === "boolean") {
        await  preference.put(key, value);
      }
      if (typeof value === "object") {
        if (Array.isArray(value)) {
          await  preference.put(key, value);
        } else {
          await  preference.put(key, JSON.stringify(value));
        }
      }
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to put value, Cause: ${err}`);
    }
    // Store the Preference instance in the preference persistence file
    await preference.flush();
  }

  /**
   * Get preference data.
   */
  static async get(key: string) {
    let value: unknown;
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      value = await preference.get(key, undefined).then();
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get value, Cause: ${err}`);
    }
    return value;
  }

  /**
   * Get custom entity data.
   */
  static async getEntity(key: string) {
    let value: string = '';
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      value = (await preference.get(key, '')).toString();
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get value, Cause: ${err}`);
    }
    return JSON.parse(value);
  }

  /**
   * Get an Object object that contains all key values.
   */
  static async getAll() {
    let value: unknown;
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      value = await preference.getAll().then();
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get value, Cause: ${err}`);
    }
    return value;
  }

  /**
   * Check if the Preferences instance contains a stored key value pair named the given Key
   */
  static async has(key: string) {
    let value: boolean = false;
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      value = await preference.has(key).then();
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get value, Cause: ${err}`);
    }
    return value;
  }

  /**
   * Delete a stored key value pair named the given Key from the Preferences instance
   */
  static async delete(key: string) {
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      await preference.delete(key).then();
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get value, Cause: ${err}`);
    }
  }

  /**
   * Clear all storage in this Preferences instance
   */
  static async clear() {
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      await preference.clear().then();
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get value, Cause: ${err}`);
    }
  }

  /**
   *Asynchronous storage of data from the current Preferences instance to the persistent file of user preferences
   */
  static async flush() {
    if (!preference) {
      await this.getPreferences(getContext(this));
    }
    try {
      await preference.flush().then();
    } catch (err) {
      Logger.error(Constants.TAG, `Failed to get value, Cause: ${err}`);
    }
  }
}

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

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

相关文章

vue3项目 - 使用 pnpm 包管理器来创建项目

创建项目 npm install -g pnpm pnpm create vue 输入项目名称、包名称、选择要安装的依赖&#xff0c;最后 pnpm install pnpm format #规范格式 pnpm dev #启动项目

深度学习 | 常见问题及对策(过拟合、欠拟合、正则化)

1、训练常见问题 1.1、模型架构设计 关于隐藏层的一个万能近似定理&#xff1a; Universal Approximation Theorem&#xff1a;一个具有足够多的隐藏节点的多层前馈神经网络&#xff0c;可以逼近任意连续的函数。&#xff08;Cybenko, 1989&#xff09;—— 必须包含至少一种有…

mysql自增序列 关于mysql线程安全 独享内存 溢出 分析

1 MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&#xff0c;锁冲突也是影响数据库并发访问性能的一个重要因素。 相对其他数据库而言&#xff0c;MySQL的锁机制比较简单&#xff0c…

C++中的内存锁定

内存锁定(memory locking)是确保进程保留在主内存中并且免于分页的一种方法。在实时环境中&#xff0c;系统必须能够保证将进程锁定在内存中&#xff0c;以减少数据访问、指令获取、进程之间的缓冲区传递等的延迟。锁定内存中进程的地址空间有助于确保应用程序的响应时间满足实…

二维码初体验 com.google.zxing 实现

文章目录 一、概述二、实现效果1. 完整版本2. 简化版本 三、源码结构四、完整代码 一、概述 Java 操作二维码的开源项目很多&#xff0c;如 SwetakeQRCode、BarCode4j、Zxing 等&#xff0c;这边以Zxing 为例进行介绍。 二、实现效果 1. 完整版本 选择需要生成QR原始文件&a…

大模型工具_awesome-chatgpt-prompts-zh

https://github.com/PlexPt/awesome-chatgpt-prompts-zh 1 功能 整体功能&#xff0c;想解决什么问题 ChatGPT 中文调教指南&#xff1a;提供一些常用的使用场景及对应的 Prompt 提示 当前解决了什么问题&#xff0c;哪些问题解决不了 针对想解决实际问题&#xff0c;但不知道…

图像识别中的 Vision Transformers (ViT)

引言 Vision Transformers (ViT) 最近已成为卷积神经网络(CNN) 的竞争替代品&#xff0c;而卷积神经网络 (CNN) 目前在不同的图像识别计算机视觉任务中处于最先进的水平。ViT 模型在计算效率和准确性方面比当前最先进的 (CNN) 模型高出近 4 倍。 Transformer 模型已成为自然语…

Diffusion扩散模型学习:图片高斯加噪

高斯分布即正态分布&#xff1b;图片高斯加噪即把图片矩阵每个值和一个高斯分布的矩阵上的对应值相加 1、高斯分布 np.random.normal 一维&#xff1a; import numpy as np import matplotlib.pyplot as pltdef generate_gaussian_noise(mean, std_dev, size):noise np.ran…

小白入门之安装NodeJS

重生之我在大四学JAVA 第五章 安装NodeJS 如果你在购买我闲鱼的程序&#xff0c;请尽量使用node14版本 修改安装路径 接着傻瓜式NEXT 测试是否安装成功 如果上面没提示版本号&#xff0c;就按照前两章配置环境变量步骤配置下环境变量 设置镜像地址 npm config set re…

一种简单的自编码器PyTorch代码实现

1. 引言 对于许多新接触深度学习爱好者来说&#xff0c;玩AutoEncoder总是很有趣的&#xff0c;因为它具有简单的处理逻辑、简易的网络架构&#xff0c;方便可视化潜在的特征空间。在本文中&#xff0c;我将从头开始介绍一个简单的AutoEncoder模型&#xff0c;以及一些可视化潜…

全渠道在线客服系统支持的沟通渠道:多渠道整合与无缝对接

我们在挑选客服系统的时候&#xff0c;经常会看到有些客服产品会强调自己是“全渠道客服系统”&#xff0c;那什么是全渠道客服系统呢&#xff1f; 1、什么是全渠道客服系统&#xff1f; 简单来讲&#xff0c;它是指能把某个客户在不同渠道的互动历史放到一起集中展现&#x…

rqt_graph使用说明

其中右边的&#xff1a;/rosout是一个topic 也就是一个话题 /rosout是一个topic 也是一个话题 可以看到凡是在rqt_graph里面用长方形标识的全都是话题 通过观察可以发现&#xff1a;凡是用椭圆标识的全都是节点 如果切换为Nodes only视图会发现&#xff1a; 所说的no…

SpringSecurity安全框架 ——认证与授权

目录 一、简介 1.1 什么是Spring Security 1.2 工作原理 1.3 为什么选择Spring Security 1.4 HttpSecurity 介绍&#x1f31f; 二、用户认证 2.1 导入依赖与配置 2.2 用户对象UserDetails 2.3 业务对象UserDetailsService 2.4 SecurityConfig配置 2.4.1 BCryptPasswo…

【数据结构入门精讲 | 第八篇】一文讲清全部排序算法(2)

在上一篇文章中我们介绍了冒泡排序、快速排序等算法&#xff0c;这一篇我们接着对排序算法的学习。 目录 归并排序堆排序选择排序计数排序基数排序排序总结 归并排序 归并排序是建立在归并操作上的一种有效&#xff0c;稳定的排序算法&#xff0c;该算法是采用分治法&#xff…

MySQL报错:1054 - Unknown column ‘xx‘ in ‘field list的解决方法

我在操作MySQL遇到1054报错&#xff0c;报错内容&#xff1a;1054 - Unknown column Cindy in field list&#xff0c;下面演示解决方法&#xff0c;非常简单。 根据箭头指示&#xff0c;Cindy对应的应该是VARCHAR文本数字类型&#xff0c;字符串要用引号&#xff0c;所以解决方…

【C语言】打印内存数据

C语言&#xff0c;用函数封装&#xff1a;16进制打印unsigned char *p指向的内存&#xff0c;长度为int l。16个字节&#xff0c;换一次行。16个字节用一个字符串缓存&#xff0c;一次打印。 以下是一个使用函数封装的C语言代码&#xff0c;用于以16进制格式打印unsigned char …

MySQL 事务的ACID特性

MySQL事务是什么&#xff0c;它就是一组数据库的操作&#xff0c;是访问数据库的程序单元&#xff0c;事务中可能包含一个或者多个 SQL 语句。这些SQL 语句要么都执行、要么都不执行。我们知道&#xff0c;在MySQL 中&#xff0c;有不同的存储引擎&#xff0c;有的存储引擎比如…

省时攻略:快速获得Creo安装包,释放创意天才!

不要再在网上浪费时间寻找Creo的安装包了&#xff0c;一键下载安装&#xff0c; 你要的一切都可以在这里找到&#xff01;我们深知在海量的信息中寻找合适的软件包并非易事&#xff0c;而且往往还伴随着繁琐的安装过程。然而&#xff0c;现在有了我们&#xff0c;一切变得轻松简…

【飞凌 OK113i-C 全志T113-i开发板】一些有用的常用的命令测试

一些有用的常用的命令测试 一、系统信息查询 可以查询板子的内核信息、CPU处理器信息、环境变量等 二、CPU频率 从上面的系统信息查询到&#xff0c;这是一颗具有两个ARMv7结构A7内核的处理器&#xff0c;主频最高1.2GHz 可以通过命令查看当前支持的频率以及目前所使用主频 …

爬虫工作量由小到大的思维转变---<第二十三章 Scrapy开始很快,越来越慢(医病篇)>

诊断篇https://blog.csdn.net/m0_56758840/article/details/135170994?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170333243316800180644102%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id1703332433168001806441…