开源手机网站/武汉网站建设方案优化

开源手机网站,武汉网站建设方案优化,做网站用什么后缀好,怎么用织梦做网站引言 本文章基于HarmonyOS NEXT操作系统,API12以上的版本。 在 ArkTS (ArkUI 框架) 中,用户首选项 (Preferences) 和 持久化存储 (PersistentStorage) 都用于数据存储,但它们有不同的应用场景和特点。 1. 用户首选项 (Preferences) 概念&a…

引言

本文章基于HarmonyOS NEXT操作系统,API12以上的版本。

ArkTS (ArkUI 框架) 中,用户首选项 (Preferences)持久化存储 (PersistentStorage) 都用于数据存储,但它们有不同的应用场景和特点。


1. 用户首选项 (Preferences)

概念

  • 轻量级键值对存储,主要用于存储用户设置或小型数据,如应用配置、主题模式、语言等。
  • 适用于 频繁读取少量更新 的数据存储。

特点

  • 主要用于存储简单的键值对,如 booleanstringnumber 等。
  • 数据存储在 本地沙盒 中,并会在 应用重新启动后保持不变
  • 适合存储 小量数据,如 UI 设置、开关状态等。

使用场景

  • 主题模式(浅色/深色模式)。
  • 语言偏好设置(中文/英文)。
  • 记住用户是否已登录(布尔值)。
  • 开关设置,如通知开关。

示例代码

import preferences from '@ohos.data.preferences';// 获取 Preferences 实例
async function saveThemePreference(isDarkMode: boolean) {const preferencesInstance = await preferences.getPreferences(globalThis, 'user_settings');await preferencesInstance.put('dark_mode', isDarkMode);await preferencesInstance.flush(); // 确保数据写入
}// 读取 Preferences
async function getThemePreference(): Promise<boolean> {const preferencesInstance = await preferences.getPreferences(globalThis, 'user_settings');return await preferencesInstance.get('dark_mode', false); // 默认值 false
}

2. 核心API介绍

Preferences 组件主要提供 读取、写入、删除 用户首选项的方法。常用的 API 主要包括:

(1)获取 Preferences 实例

在 OpenHarmony 设备上,用户首选项存储在 文件 中,因此需要指定存储路径。

import preferences from '@ohos.data.preferences';async function getPreferences() {try {const pref = await preferences.getPreferences(globalThis.getContext(), 'settings.preferences');return pref;} catch (err) {console.error('获取 Preferences 失败:', err);}
}
  • getPreferences(context, fileName): 通过 文件名 获取 Preferences 实例,该文件存储在应用的数据目录下。
  • context: 需要传入全局应用上下文 globalThis.getContext()

(2)存储数据

使用 put() 方法存储键值对数据,并使用 flush() 进行同步保存。

async function savePreferences() {const pref = await getPreferences();if (!pref) return;pref.put('theme', 'dark');  // 存储字符串pref.put('volume', 50);      // 存储数值pref.put('notifications', true);  // 存储布尔值await pref.flush();  // 立即保存到本地console.log('数据已保存');
}
  • put(key, value): 存储 key-value 键值对。
  • flush(): 同步 写入存储,否则数据可能不会立即写入。

(3)读取数据

使用 get() 方法获取存储的数据:

async function loadPreferences() {const pref = await getPreferences();if (!pref) return;const theme = pref.get('theme', 'light');  // 默认值 "light"const volume = pref.get('volume', 10);     // 默认值 10const notifications = pref.get('notifications', false);  // 默认值 falseconsole.log(`当前主题: ${theme}, 音量: ${volume}, 通知开关: ${notifications}`);
}
  • get(key, defaultValue): 读取 存储的值,如果键不存在,则返回默认值。

(4)删除数据

使用 delete() 方法移除指定键:

async function removePreferenceKey() {const pref = await getPreferences();if (!pref) return;pref.delete('theme');  // 删除 "theme" 配置项await pref.flush();  // 确保数据同步更新console.log('主题设置已删除');
}
  • delete(key): 删除指定 key 对应的值。

(5)清除所有数据

可以使用 clear() 方法清空整个 Preferences。

async function clearPreferences() {const pref = await getPreferences();if (!pref) return;pref.clear();  // 清空所有数据await pref.flush();console.log('所有用户设置已清除');
}
  • clear(): 清空所有存储的键值对数据。

3. 持久化存储 (PersistentStorage)

概念

  • 更通用的数据存储方式,可以用于存储更大规模的结构化数据,如对象、列表或复杂数据。
  • 通常与本地数据库(如 SQLite文件存储)结合使用。

特点

  • 适用于 存储较大数据量,如缓存数据、用户数据、应用状态等。
  • 提供更丰富的 API,支持复杂的数据管理。
  • 数据存储在应用的私有目录,可以长期存储,即使应用重启也不会丢失。

使用场景

  • 用户账户信息(如用户名、头像)。
  • 应用的缓存数据(如搜索历史、下载列表)。
  • 复杂的设置数据(如 JSON 结构的配置)。
  • 离线数据存储(如离线文档、任务列表)。

示例代码(基于数据存储组件)

import { PersistentStorage } from '@ohos.data.storage';// 保存数据
async function saveUserData(userData: any) {const storage = new PersistentStorage('user_data'); // 创建存储实例await storage.set('profile', JSON.stringify(userData));await storage.flush(); // 确保数据写入
}// 读取数据
async function getUserData(): Promise<any> {const storage = new PersistentStorage('user_data');const userDataStr = await storage.get('profile', '{}'); // 默认值为空对象return JSON.parse(userDataStr);
}

4. 核心API介绍

(1)存储数据

使用 set() 方法存储数据:

storage.set('username', 'Alice');
storage.set('age', 25);
storage.set('isPremiumUser', true);
  • 该方法支持存储 字符串、数值、布尔值等基本数据类型
  • 数据存储在应用本地,不会在应用重启时丢失。

(2)获取数据

使用 get<T>() 方法获取存储的数据:

let username: string = storage.get<string>('username', 'defaultUser');
let age: number = storage.get<number>('age', 0);
let isPremium: boolean = storage.get<boolean>('isPremiumUser', false);
  • 参数
    • 第一个参数是键(key)。
    • 第二个参数是 默认值(当 key 不存在时返回此值)。
  • 返回值类型 需要显式指定(泛型 <T>)。

(3)删除数据

使用 delete() 方法删除某个键值:

storage.delete('username');
  • 删除后,使用 get() 方法查询时将返回默认值。

(4)清空所有数据

使用 clear() 方法删除所有存储的键值对:

storage.clear();
  • 该方法会清除 PersistentStorage 中存储的所有数据,谨慎使用!

(5)数据是否存在

使用 has() 方法检查某个键是否存在:

if (storage.has('username')) {console.log('用户名已存储');
} else {console.log('用户名不存在');
}

(6)简单封装

以下是一个简单封装的 PersistentStorage 工具类:

import { PersistentStorage } from '@ohos.data.preferences';class StorageUtil {private static instance: PersistentStorage;private constructor() {}/*** 获取 PersistentStorage 实例(单例模式)*/private static getInstance(): PersistentStorage {if (!this.instance) {this.instance = PersistentStorage.getSharedInstance();}return this.instance;}/*** 存储数据* @param key 键名* @param value 要存储的值(支持 string、number、boolean)*/static set<T>(key: string, value: T): void {this.getInstance().set(key, value);}/*** 获取存储数据* @param key 键名* @param defaultValue 默认值(如果 key 不存在,则返回此值)* @returns 存储的数据*/static get<T>(key: string, defaultValue: T): T {return this.getInstance().get<T>(key, defaultValue);}/*** 删除指定 key 的存储数据* @param key 键名*/static delete(key: string): void {this.getInstance().delete(key);}/*** 清除所有存储数据*/static clear(): void {this.getInstance().clear();}/*** 判断某个 key 是否存在* @param key 键名* @returns 存在返回 true,否则返回 false*/static has(key: string): boolean {return this.getInstance().has(key);}
}export default StorageUtil;// 示例使用
StorageUtil.set('username', 'Alice');
const username = StorageUtil.get('username', 'defaultUser');
console.log(`Username: ${username}`);
StorageUtil.delete('username');
console.log(StorageUtil.has('username')); // false
StorageUtil.clear();

5. 对比总结

特性用户首选项 (Preferences)持久化存储 (PersistentStorage)
存储方式轻量级键值对存储适用于存储复杂数据
数据类型string, boolean, number复杂数据结构(JSON、列表等)
数据量小量数据大量数据
适用场景主题、语言、用户偏好用户信息、缓存、离线数据
读写性能读取速度快适用于批量存储
数据持久性持久化存储持久化存储

6. 使用建议

  • 如果只是存储 简单的设置数据,比如开关状态、主题模式,建议使用 Preferences
  • 如果需要存储 复杂对象(如 JSON 数据)或者 大量数据(如历史记录、缓存),建议使用 PersistentStorage

当然如果你的数据规模较大,还可以考虑 数据库 (键值型数据库KVManager或者关系型数据库RdbStore) 进行存储,以提高查询和管理效率。

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

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

相关文章

Linux 启动Jar脚本设置开机自启【超级详细】

Linux 启动Jar脚本&&设置开机自启【超级详细】 概要服务器开机自启服务重启脚本 概要 最近在Linux服务器中部署了一个项目&#xff08;单机版&#xff09;&#xff0c;每次更新服务的时候需要用到好几个命令&#xff0c;停止服务&#xff0c;再重启&#xff0c;并且服…

【第21节】windows sdk编程:网络编程基础

目录 引言&#xff1a;网络编程基础 一、socket介绍(套接字) 1.1 Berkeley Socket套接字 1.2 WinSocket套接字 1.3 WSAtartup函数 1.4 socket函数 1.5 字节序转换 1.6 绑定套接字 1.7 监听 1.8 连接 1.9 接收数据 1.10 发送数据 1.11 关闭套接字 二、UDP连接流程…

QT 图表(拆线图,栏状图,饼状图 ,动态图表)

效果 折线图 // 创建折线数据系列// 创建折线系列QLineSeries *series new QLineSeries;// series->append(0, 6);// series->append(2, 4);// series->append(3, 8);// 创建图表并添加系列QChart *chart new QChart;chart->addSeries(series);chart->setTit…

vue3 ts 请求封装后端接口

一 首页-广告区域-小程序 首页-广告区域-小程序 GET/home/banner1.1 请求封装 首页-广告区域 home.ts export const getHomeBannerApi (distributionSite 1) > {return http<BannerItem[]>({method: GET,url: /home/banner,data: {distributionSite,},}) }函数定…

响应式CMS架构优化SEO与用户体验

内容概要 在数字化内容生态中&#xff0c;响应式CMS架构已成为平衡搜索引擎可见性与终端用户体验的核心载体。该系统通过多终端适配技术&#xff0c;确保PC、移动端及平板等设备的内容渲染一致性&#xff0c;直接降低页面跳出率并延长用户停留时长。与此同时&#xff0c;智能S…

C++核心语法快速整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要为学过多门语言玩家快速入门C 没有基础的就放弃吧。 全部都是精华&#xff0c;看完能直接上手改别人的项目。 输出内容 std::代表了这里的cout使用的标准库&#xff0c;避免不同库中的相同命名导致混乱 …

如何让自动驾驶汽车“看清”世界?坐标映射与数据融合概述

在自动驾驶领域,多传感器融合技术是实现车辆环境感知和决策控制的关键。其中,坐标系映射和对应是多传感器融合的重要环节,它涉及到不同传感器数据在统一坐标系下的转换和匹配,以实现对车辆周围环境的准确感知。本文将介绍多传感器融合中坐标系映射和对应的数学基础和实际应…

移除idea External Liraries 中maven依赖包

问题背景 扩展包里面不停的出现已经在POM文件注释的包&#xff0c;其实是没有查询到根源位置。 在IDEA插件中搜索Maven Helper 点击pom.xml文件 会出现扩展插件 定位之后在pom中添加exclusions&#xff0c;如下代码 <dependency><groupId>com.disney.eva.framewo…

AI革命!蓝耘携手海螺AI视频,打造智能化视频新纪元

AI革命&#xff01;蓝耘携手海螺AI视频&#xff0c;打造智能化视频新纪元 前言 在这个信息爆炸的时代&#xff0c;视频已经成为我们获取信息、学习新知识的重要方式。而随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI与视频内容的结合为我们带来了全新的…

ElasticSearch 可观测性最佳实践

ElasticSearch 概述 ElasticSearch 是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理 PB 级别&#xff08;大数据时代&#xff09;的数据。ES 也使用 Java 开…

Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框

单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的&#xff0c;如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…

【Java】TCP网络编程:从可靠传输到Socket实战

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…

html5炫酷的科技感3D文字效果实现详解

炫酷的科技感3D文字效果实现详解 这里写目录标题 炫酷的科技感3D文字效果实现详解项目概述核心技术实现1. 3D文字效果2. 故障艺术效果&#xff08;Glitch Effect&#xff09;3. 动态网格背景4. 扫描线效果5. 粒子效果 性能优化考虑技术难点与解决方案项目总结扩展优化方向 项目…

车道保持中车道线识别

需要让小车保持车道行驶&#xff0c;首先需要进行车道线识别。 也可参看论文&#xff08;上传到资源里&#xff09;&#xff1a;自动驾驶汽车车道检测与预测的技术解析-基于图像处理和Hough变换的方法 1 车道识别流程 想进行车道线识别&#xff0c;并且希望在图像中选择一个特…

英伟达有哪些支持AI绘画的 工程

英伟达在AI绘画领域布局广泛&#xff0c;其自研工具与第三方合作项目共同构建了完整的技术生态。以下是其核心支持AI绘画的工程及合作项目的详细介绍&#xff1a; 一、英伟达自研AI绘画工具 1. GauGAN系列 技术特点&#xff1a;基于生成对抗网络&#xff08;GAN&#xff09;&…

驱动开发的引入

1.引入 Linux内核的整体架构本就非常庞大&#xff0c;其包含的组件也非常多。而我们怎样把需要的部分都包含在内核中呢? 一种方法是把所有需要的功能都编译到Linux内核中。这会导致两个问题&#xff0c;一是生成的内核会很大&#xff0c;二是如果我们要在现有的内核中新增或删…

Android在kts中简单使用AIDL

Android在kts中简单使用AIDL AIDL相信做Android都有所了解&#xff0c;跨进程通信会经常使用&#xff0c;这里就不展开讲解原理跨进程通信的方式了&#xff0c;最近项目换成kts的方式&#xff0c;于是把aidl也换成了统一的方式&#xff0c;其中遇到了很多问题&#xff0c;这里…

物化视图详解:数据库性能优化的利器

物化视图&#xff08;Materialized View&#xff09;作为数据库性能优化的核心手段&#xff0c;通过预计算和存储查询结果&#xff0c;显著提升了复杂查询的效率。本文将深入剖析物化视图的工作原理、应用场景及最佳实践&#xff0c;帮助企业在合适的场景中充分发挥其性能优势。…

快速入手:Nacos融合SpringCloud成为注册配置中心

快速入手&#xff1a;Nacos融合SpringCloud成为注册配置中心 前言安装Nacos项目搭建添加配置启动类添加注解运行项目服务调用RestTemplate 模式FeignClient 模式 Gateway 网关 前言 Spring Cloud是一系列框架的集合&#xff0c;提供了微服务架构下的各种解决方案&#xff0c;如…

Python | 如何在Pandas中删除常量列

在数据分析中&#xff0c;经常会遇到数据集中始终具有常量值的列&#xff08;即&#xff0c;该列中的所有行包含相同的值&#xff09;。这样的常量列不提供有意义的信息&#xff0c;可以安全地删除而不影响分析。 如&#xff1a; 在本文中&#xff0c;我们将探索如何使用Pyth…