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

HarmonyOS应用开发中实现本地化存储的几种方式

Preferences 存储

适用于存储简单的键值对数据,如用户设置、配置信息等。其特点是轻量级、使用简单,适合频繁读取和少量更新的场景,数据存储在本地沙盒中,应用重启后数据保持不变。

  • 获取 Preferences 实例 :使用 dataPreferences.getPreferences(context, 'preferenceName') 方法来获取或创建一个 Preferences 实例,其中 context 是应用的上下文,preferenceName 是存储的名称。

  • 存储数据 :通过 putStringputIntputBoolean 等方法来存储不同类型的数据,最后调用 flush() 方法使数据持久化到存储系统中。

  • 读取数据 :使用 getStringgetIntgetBoolean 等方法来读取存储在 Preferences 中对应类型的数据。

  • 删除数据 :调用 delete(key) 方法可删除具体键的值,使用 clear() 方法则可删除所有数据

文件存储

适合存储较大的数据,如日志文件、图片、视频等。应用可以在自己的私有目录中进行文件的读写操作,也可以申请权限后读取共享目录中的文件。

  • 文本文件存储 :以文本格式存储数据,如配置文件、日志等。可以通过随机访问文件类实现,打开文件时需指定访问模式,如只读、读写等。

  • 二进制文件存储 :以二进制格式存储数据,如图片、音频等媒体文件。与文本文件存储类似,也是使用随机访问文件类进行操作。

  • 文件存储路径 :应用私有目录通过 context.filesDir 获取,无需额外权限;公共目录需申请相应权限,如 ohos.permission.READ_USER_STORAGE 等。

关系型数据库存储

SQLite 是一种轻量级的嵌入式数据库,鸿蒙 OS 中的 RDB Store 基于 SQLite,适合存储结构化的数据,如用户信息、订单记录等。

  • 创建数据库和表 :创建一个继承自 RdbStoreCallback 的类,在 onCreate 方法中定义表结构,通过 execSQL 方法执行 SQL 语句来创建表。

  • 插入数据 :使用 RdbStoreinsert 方法插入数据,需先创建 ContentValues 对象来存储要插入的数据。

  • 查询数据 :使用 query 方法查询数据,需指定查询的表名、列名等条件,返回 ResultSet 对象,通过该对象可获取查询结果。

  • 更新数据 :使用 update 方法更新数据,需指定更新条件和要更新的列值。

  • 删除数据 :使用 delete 方法删除数据,需指定删除条件。

对象关系映射数据库存储

通过使用类似 LitePal 的轻量级数据库框架,可以更方便地进行对象关系映射存储。

  • 添加依赖 :在项目的 build.gradle 文件中添加 LitePal 的依赖。

  • 定义数据模型 :创建一个继承自 LitePalSupport 的 Java 类来定义数据模型,如用户信息类。

  • 配置数据库 :在 assets 目录下创建 litepal.xml 配置文件,配置数据库名称、版本以及数据模型类与表的映射关系。

  • 执行数据操作 :使用 LitePal 提供的 API 进行数据的增、删、改、查等操作。

分布式数据管理

通过 DistributedData 实现多设备数据同步,需设备登录同一华为帐号。

  • 初始化 :在模块的 config.json 文件中声明 distributedDataManager 权限,并在主 Ability 或页面中初始化分布式数据管理器。

  • 创建键空间 :使用 create 方法创建键空间,指定感兴趣的键前缀列表、设备 ID 列表等,通过监听器管理数据变更。

  • 发布数据 :调用发布 API,数据会同步到其他设备,其他设备通过监听器得到数据变更通知。

  • 查询数据 :依据指定规则,如设备 ID、键等查询目标数据,若本地缓存无数据,会从云端获取。

http://www.xdnf.cn/news/3491.html

相关文章:

  • 接口幂等性保证:技术方案与实践指南
  • Three.js + React 实战系列-3D 个人主页:构建 About 组件 (响应式 + 互动 + 动效)✨
  • 【Shell 脚本编程】详细指南:第四章 - 循环结构(for、while、until) 深度解析
  • Java 基础--数组(Array):存储数据的“排排坐”
  • 青蛙Todo:高效管理日程,提升工作学习效率
  • L39.【LeetCode题解】面试题 01.07. 旋转矩阵(四种方法)
  • 鸿蒙开发:如何解决软键盘弹出后的间距
  • [免费]SpringBoot+Vue非物质文化网站系统【论文+源码+SQL脚本】
  • 2025五一杯数学建模竞赛B题 矿山数据处理 保姆级教程讲解|模型讲解
  • Spring AI开发跃迁指南(第二章:急速上手3——Advisor核心原理、源码讲解及使用实例)
  • 如何使用网站备份到u盘,网站数据备份到U盘的方法
  • Python 函数装饰器和闭包(装饰器基础知识)
  • 二叉搜索树中的搜索(递归解决)
  • 【Shell 脚本编程】详细指南:第一章 - 基础入门与最佳实践
  • 软件工程国考
  • C++负载均衡远程调用学习之消息路分发机制
  • python创建Directory和python package的区别
  • 【分享】数据恢复大师6.10[特殊字符]恢复手机误删的数据[特殊字符]
  • 运维工作中,Ansible常用模块有哪些?
  • 【云备份】服务端工具类实现
  • 解决 Oracle EXPDP 無法鎖定 NFS 相關錯誤: ORA-27086 flock: No locks available
  • ActiveMQ 性能优化与网络配置实战(一)
  • 2025MathorCup数学应用挑战赛B题
  • 机器视觉开发-打开摄像头
  • GAMES202-高质量实时渲染(Real-time Environment Mapping)
  • 【二】 数字图像的运算 (下)【数字图像处理】
  • Java学习手册:Spring 数据访问
  • 系统架构设计师:设计模式概述
  • Centos7.9 安装mysql5.7
  • 突破zero-RL 困境!LUFFY 如何借离线策略指引提升推理能力?