首页 > 其他分享 >鸿蒙NEXT开发-应用数据持久化之用户首选项(基于最新api12稳定版)

鸿蒙NEXT开发-应用数据持久化之用户首选项(基于最新api12稳定版)

时间:2024-10-27 22:17:21浏览次数:9  
标签:稳定版 preferences 用户 NEXT api12 hilog 首选项 数据 string

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下

如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识

专栏地址: https://blog.csdn.net/qq_56760790/category_12794123.html

目录

1. 应用数据持久化

2. 应用数据持久化-用户首选项

2.1 概述

2.2 约束限制

2.3 常用方法

2.3.1 封装用户首选项工具类

2.3.2 初始化用户首选项

2.3.3 使用用户首选项

4. 学习地址


1. 应用数据持久化

应用数据持久化,是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象,存储介质上的数据形态可能是文本、数据库、二进制文件等。

HarmonyOS标准系统支持典型的存储数据形态,包括用户首选项、键值型数据库、关系型数据库。

  • 用户首选项(Preferences):通常用于保存应用的配置信息。数据通过文本的形式保存在设备中,应用使用过程中会将文本中的数据全量加载到内存中,所以访问速度快、效率高,但不适合需要存储大量数据的场景。
  • 键值型数据库(KV-Store):一种非关系型数据库,其数据以“键值”对的形式进行组织、索引和存储,其中“键”作为唯一标识符。适合很少数据关系和业务关系的业务数据存储,同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度,和数据同步过程中冲突解决的复杂度而被广泛使用。相比于关系型数据库,更容易做到跨设备跨版本兼容。
  • 关系型数据库(RelationalStore):一种关系型数据库,以行和列的形式存储数据,广泛用于应用中的关系型数据的处理,包括一系列的增、删、改、查等接口,开发者也可以运行自己定义的SQL语句来满足复杂业务场景的需要。

2. 应用数据持久化-用户首选项

2.1 概述

用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用flush接口将内存中的数据写入持久化文件中。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据,也不支持通过配置加密,适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等。

2.2 约束限制

  • 首选项无法保证进程并发安全,会有文件损坏和数据丢失的风险,不支持在多进程场景下使用。
  • Key键为string类型,要求非空且长度不超过1024个字节。
  • 如果Value值为string类型,请使用UTF-8编码格式,可以为空,不为空时长度不超过16 * 1024 * 1024个字节。
  • 内存会随着存储数据量的增大而增大,所以存储的数据量应该是轻量级的,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。

2.3 常用方法

参考华为官方文档:文档中心

注意:记得用真机或者模拟器运行

2.3.1 封装用户首选项工具类

注意:PreferencesUtil文件结尾是ts不是ets

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

/**
 * 用户首选项(存储简单数据)
 */
export default class PreferencesUtil {
  // 用户首选项名称
  private static preferenceName: string = 'myStore'

  /**
   * 创建
   * @param context
   */
  static createPreferences(context) {
    globalThis.getFontPreferences = (() => {
      let preferences: Promise<dataPreferences.Preferences> =
        dataPreferences.getPreferences(context, this.preferenceName);
      return preferences;
    });
  }

  /**
   * 存放数据
   * @param value
   */
  static savePreferencesValue(key: string, value: string) {
    globalThis.getFontPreferences().then((preferences) => {
      preferences.has(key).then(async (isExist) => {
        if (!isExist) {
          await preferences.put(key, value);
          preferences.flush();
        }
      }).catch((err) => {
        hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'save PreferencesValue fail');
      });
    }).catch((err) => {
      hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'save PreferencesValue fail');
    });
  }

  /**
   * 获取数据
   * @returns
   */
  static async getPreferencesValue(key: string) {
    let value: string = '';
    const preferences = await globalThis.getFontPreferences();
    value = await preferences.get(key, value);
    return value;
  }

  /**
   * 删除数据
   */
  static async deletePreferencesValue(key: string) {
    const preferences: dataPreferences.Preferences = await globalThis.getFontPreferences();
    let deleteValue = preferences.delete(key);
    deleteValue.then(() => {
      hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'delete PreferencesValue success');
    }).catch((err) => {
      hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'delete PreferencesValue fail');
    });
  }
}

2.3.2 初始化用户首选项

在EntryAbility文件中初始化用户首选项

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // 初始化用户首选项
    PreferencesUtil.createPreferences(this.context);
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
        hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
    });
  }

2.3.3 使用用户首选项

注意:用户首选项存的值全局都可以获取到

import PreferencesUtil from '../utils/PreferencesUtil'

@Entry
  @Component
  struct Index {
    build() {
      Column() {
        Text('存值')
          .onClick(() => {
            PreferencesUtil.savePreferencesValue('username', '东林')
            console.log('preferences save success')
          }).margin({bottom:50})

        Divider()

        Text('点我获取preferences值')
          .onClick(async () => {
            const username = await PreferencesUtil.getPreferencesValue('username')
            console.log('preferences username:' + JSON.stringify(username))
          }).margin({bottom:50})

        Divider()

        Text('删除')
          .onClick(async () => {
            await PreferencesUtil.deletePreferencesValue('username')
            console.log('preferences remove success')
          })
      }
      .height('100%')
        .width('100%')
    }
  }

4. 学习地址

全网首发鸿蒙NEXT星河版零基础入门到实战,2024年最新版,企业级开发!视频陆续更新中!_哔哩哔哩_bilibili

标签:稳定版,preferences,用户,NEXT,api12,hilog,首选项,数据,string
From: https://blog.csdn.net/qq_56760790/article/details/143275490

相关文章

  • KVM虚拟机下利用宝塔面板中的 Docker 配置 Nextcloud + onlyoffice
    第一部分:安装配置nextcloud准备(1)启动一个KVM虚拟机,见下图。该虚拟机为anlisos8…0.2虚拟机的ssh、hostname、IP地址都已配置好。(2)宝塔面板也已安装好docker一、环境docker版本:29.0.4DockerCompose版本:2.27.0mariadb-docker版本:10.6.17......
  • 【AI探索实践】使用Docker部署ChatGPT Next Web个人智能助手
    【AI探索实践】使用Docker部署ChatGPTNextWeb个人智能助手一、ChatGPTNextWeb介绍1.1ChatGPTNextWeb简介1.2主要特点1.3主要使用场景二、本次实践规划2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1检查Docker服务状态3.2检查Docker版本3.3检查doc......
  • 鸿蒙Harmony OS Next原生开发TS基本数据类型
    鸿蒙初开,开天辟地TS语法之变量书接上文,在TS中,我们常用的数据类型有1.number表示数字,包括浮点数和整数在内leta:number=100;letb:number=-33;letc:number=2.5;console.log(a)console.log(b)console.log(c)console.log(typeofc)leta:number=100;letb:number......
  • F5 BIG-IP Next 20.3.0 发布下载 - 多云安全和应用交付
    F5BIG-IPNext20.3.0-多云安全和应用交付BIG-IP是硬件平台和软件解决方案的集合,提供专注于安全性、可靠性和性能的服务请访问原文链接:https://sysin.org/blog/f5-big-ip-next/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBIG-IPNext您所熟知和信赖的BIG......
  • 延迟任务管理:HarmonyOS Next 的灵活后台调度
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。延迟任务(DeferredTask)是HarmonyOSNex......
  • 解析短时任务与长时任务:HarmonyOS Next 后台开发的基础
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。后台任务是应用开发中不可或缺的一部分,......
  • HarmonyOS Next后台任务开发入门:背景与基本任务类型
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。随着移动互联网的快速发展,用户对应用的......
  • 节能型后台数据同步器:HarmonyOS Next的智能延迟任务管理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、项目背景与需求分析后台数据同步......
  • 智能提醒助手——基于HarmonyOS Next的多场景后台任务实现
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、项目背景与需求分析智能提醒助手......
  • 后台提醒与代理提醒:HarmonyOS Next 的智能提醒管理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在移动应用开发中,及时有效的提醒功能对......