鸿蒙应用开发:数据持久化

最近在搞公司项目用到了鸿蒙端的数据持久化,特来跟大家分享一下。

在鸿蒙开发中,可以使用以下几个包来实现数据的持久化处理:

  • Data Ability

通过数据能力组件,开发者可以实现复杂的数据操作,包括增、删、改、查等功能。它允许不同的应用共享数据,并提供了统一的数据访问接口。

  • SQLite 

这是一个轻量级的关系型数据库,适用于本地存储。开发者可以使用 SQL 语句进行数据管理,支持事务处理,适合需要复杂查询的场景。

  • Preferences

适合存储简单的配置信息和用户偏好。通过键值对的方式存取数据,非常方便,尤其是在需要保存少量数据时。

  • File System 

直接操作文件系统,允许读写文件。这种方法灵活性高,适合存储大文件或非结构化数据,比如图片、音频等。

本次分享主要以用户首选项为例:在登陆页面输入个人信息后,点击“配置”后保存输入数据并且跳转到下一个页面,在第二个页面显示用户在登陆页输入的信息,并且支持登录页与显示页的数据同步。此外,登录页“退出”按钮绑定了应用关闭功能。

PreferenceModel.ets

import dataPreferences from '@ohos.data.preferences';
import promptAction from '@ohos.promptAction';
import { BusinessError } from '@ohos.base';
import showToast from './ShowToast';let context = getContext(this);let TAG:string = 'preference';// 自定义用户首选项类
export class PreferenceModel {static preferences: dataPreferences.Preferences | null = null;/*** 初始化用户首选项类*/public static initPre(){let options: dataPreferences.Options = { name: 'myStore.db' };PreferenceModel.preferences = dataPreferences.getPreferencesSync(context, options);}/*** 写入并保存数据* @param name - 键名* @param data - 键值*/public static async writeData(name:string,data:string) {// Check whether the data is null.let isDataNull = PreferenceModel.checkData(data);if (isDataNull) {return;}// The data is inserted into the preferences database if it is not empty.PreferenceModel.preferences.putSync(name,data);// 使用flush方法将preferences实例的数据存储到持久化文件,调用用户首选项实例的flush接口await PreferenceModel.preferences.flush();// PreferenceModel.putPreference(name,data);showToast('保存成功!');}/*** 获取数据,返回字符串类型结果* @param name - 键名*/public static getPreference(name:string) {let isExist: boolean = PreferenceModel.preferences.hasSync(name);if (isExist) {console.info(TAG + "The key 'startup' is contained.");let value: dataPreferences.ValueType = PreferenceModel.preferences.getSync(name, 'default');return value.toString().replace(/^"|"$/g, '');} else {console.info(TAG + "The key 'startup' dose not contain.");showToast('该值不存在!');}}}

Register.ets

import router from '@ohos.router';
import { PreferenceModel } from '../common/PreferenceModel';
import { BusinessError } from '@ohos.base';
import common from '@ohos.app.ability.common';
import window from '@ohos.window';@Entry
@Component
struct Register {@State ip:string = '';@State port:string = '';@State username:string = '';@State password:string = '';@State port_ftp:string = '';@State isFocused: boolean = false;context: common.UIAbilityContext = getContext(this) as common.UIAbilityContextaboutToAppear(): void {// 设置不显示导航栏和状态栏window.getLastWindow(this.context).then((data) => {data.setWindowSystemBarEnable([]).then(() => {console.debug('Succeeded in setting the system bar to be invisible.');});});PreferenceModel.initPre()this.ip = PreferenceModel.hasPreference('register-ip')? (PreferenceModel.getPreference('register-ip')).toString(): '10.0.1.182';this.port = PreferenceModel.hasPreference('register-port')? (PreferenceModel.getPreference('register-port')).toString(): '1883';this.username = PreferenceModel.hasPreference('register-username')? (PreferenceModel.getPreference('register-username')).toString(): 'username';this.password = PreferenceModel.hasPreference('register-password')? (PreferenceModel.getPreference('register-password')).toString(): 'password';this.port_ftp = PreferenceModel.hasPreference('register-port-ftp')? (PreferenceModel.getPreference('register-port-ftp')).toString(): '21';}build() {Stack({ alignContent: Alignment.TopStart }) {// 中间的内容部分Column({  }) {Column({ space:20 }){TextInput({text: this.ip}).backgroundColor('#FFFFFF').focusable(this.isFocused).textAlign(TextAlign.Center).onChange((value:string)=>{this.ip = value}).onClick(()=>{this.isFocused = true})Divider().margin({top:-25})TextInput({text: this.port}).backgroundColor('#FFFFFF').focusable(this.isFocused).textAlign(TextAlign.Center).onChange((value:string)=>{this.port = value}).onClick(()=>{this.isFocused = true})Divider().margin({top:-25})TextInput({text: this.username}).backgroundColor('#FFFFFF').focusable(this.isFocused).textAlign(TextAlign.Center).onChange((value:string)=>{this.username = value}).onClick(()=>{this.isFocused = true})Divider().margin({top:-25})TextInput({text: this.password}).backgroundColor('#FFFFFF').focusable(this.isFocused).textAlign(TextAlign.Center).onChange((value:string)=>{this.password = value}).onClick(()=>{this.isFocused = true})Divider().margin({top:-25})TextInput({text: this.port_ftp}).backgroundColor('#FFFFFF').focusable(this.isFocused).textAlign(TextAlign.Center).expandSafeArea([SafeAreaType.KEYBOARD], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]).onChange((value:string)=>{this.port_ftp = value}).onClick(()=>{this.isFocused = true})Divider().margin({top:-25})}.width('40%').height('60%').margin({top:px2vp(200)})Row({space:80}){Text("配置").fontFamily('Source Han Sans CN-Regular').fontSize(24).fontColor('#262B2F').fontWeight(400).textAlign(TextAlign.Center).width(130).height(60).borderRadius(10).backgroundColor('#c1e6c6').onClick(()=>{PreferenceModel.writeData('register-ip',JSON.stringify(this.ip))PreferenceModel.writeData('register-port',JSON.stringify(this.port))PreferenceModel.writeData('register-username',JSON.stringify(this.username))PreferenceModel.writeData('register-password',JSON.stringify(this.password))PreferenceModel.writeData('register-port-ftp',JSON.stringify(this.port_ftp))router.pushUrl({url: 'pages/Index'}).then(()=>{}).catch((err: BusinessError) => {})})Text("退出").fontFamily('Source Han Sans CN-Regular').fontSize(24).fontColor('#262B2F').fontWeight(400).textAlign(TextAlign.Center).width(130).height(60).borderRadius(10).backgroundColor('#c1e6c6').onClick(async ()=>{this.context.terminateSelf()})}.width(500).height('30%').justifyContent(FlexAlign.Center)}.width('94.6%').height('92.2%').backgroundColor('#FFFFFF').borderRadius(30).margin({left:"2.7%",top:"7.8%"}).alignItems(HorizontalAlign.Center)}.width('100%').height('100%').backgroundColor('#2d2736')}
}

Index.ets

import { PreferenceModel } from '../common/PreferenceModel';@Entry
@Component
struct Index {@State message: string[] = [];aboutToAppear(): void {PreferenceModel.initPre()this.message.push(PreferenceModel.getPreference('register-ip').toString());this.message.push(PreferenceModel.getPreference('register-port').toString());this.message.push(PreferenceModel.getPreference('register-username').toString());this.message.push(PreferenceModel.getPreference('register-password').toString());this.message.push(PreferenceModel.getPreference('register-port-ftp').toString());}build() {Row() {Column() {ForEach(this.message, (item, index)=>{Text(item).fontSize(50).fontWeight(FontWeight.Bold)})}.width('100%')}.height('100%')}
}

效果

项目已上传gitee,感兴趣的家人不妨给个星星⭐ 

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

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

相关文章

【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线

在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上,华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布。 华为官方透露,截至目前,鸿蒙操作系统在中国市场份额占据 Top2 的领先地位,拥有超过 1.1 亿 的代码行和 6…

Linux如何安装“ServerAgent“并使用?

1、cd /home/ 2、上传文件到项目文件下 3、解压 unzip ServerAgent-2.2.3.zip 4、打开文件 cd ServerAgent-2.2.3/ 5、赋权(测试环境) chmod -R 777 *6、启动 ./startAgent.sh

Prompt-Tuning方法学习

文章目录 一、背景1.1 Pre-training1.2 Fine-Tuning1.3 高效微调(SOTA PEFT)1.4 基于强化学习的进阶微调方法(RLHF) 二、Prompt-Tuning技术2.1 发展历程2.2 Prompt模板构建方式 三、基于连续提示的Prompt Tuning四、Q&A 一、背…

程序员节日的日期是10月24日‌程序员日

‌程序员节日的日期是10月24日。‌ 这一天被称为‌中国程序员日或‌1024程序员节,由‌博客园、‌CSDN等自发组织设立,旨在纪念程序员对科技世界的贡献。 程序员节日的由来和意义 1024程序员节的由来可以追溯到2010年,最初由网友提出设立一个…

RocketMQ消息处理详解!

文章目录 引言同步发送原理分析优缺点优点缺点 使用场景 异步发送原理分析优缺点优点缺点使用场景 单向发送原理分析优缺点优点缺点 使用场景 三种方式对比如何选择同步发送异步发送单向发送 总结 引言 在 RocketMQ 中,有 3种简单的消息发送方式:同步发…

计算服务器:开启科学计算新变革的强大引擎

1983 年,著名数学家 Lax 为首的调研小组指出,大型科学计算对国家安全、科技进步与经济发展至关重要,从美国国家利益出发,大型计算的绝对优势不容动摇。 科学计算是什么?为何在 20 世纪 80 年代就被提升到美国国家利益层…

Pytest日志收集器配置

前言 在pytest框架中,日志记录(logging)是一个强大的功能,它允许我们在测试期间记录信息、警告、错误等,从而帮助调试和监控测试进度。 pytest与Python标准库中的logging模块完美集成,因此你可以很容易地在…

vmware虚拟机linux系统安装

一、下载linux镜像安装包 步骤1---网址地址下载镜像 地址:Index of /ubuntu-releases/22.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 步骤2---下载linux版本号 步骤3---查看下载的linuxiso linux镜像操作系统 二、vmware新建安装linux操作系统…

边缘计算技术的优势与挑战

如今,随着5G快速无线网络的到来,将计算存储和物联网(IoT)分析的部署放在靠近数据产生的地方,使得边缘计算成为可能。 物联网设备和新应用的扩展需要实时计算能力。5G无线正在考虑边缘系统,以快速跟踪支持实…

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

爬虫中代理ip选择和使用实战

一、爬虫中的反爬问题 爬虫技术不仅是一种工具,更像是一门捕捉信息的艺术。通过它,我们能够从浩瀚的互联网中,精确获取到所需的有价值数据。对于那些需要进行数据分析或模型训练的人来说,爬虫技术几乎是必备的技能。虽然网上公开…

git提交到github个人记录

windows下git下载 1.进入git官网https://git-scm.com/downloads/win 一直默认选项即可 2.在settings中SSH and GPG keys中Add SSH key 3.选择git cmd git使用 1.配置用户名,和邮箱 git config --global user.email "youexample.com" git config --g…

Director3D: Real-world Camera Trajectory and 3DScene Generation from Text 论文解读

目录 一、概述 二、相关工作 1、文本到3D生成 2、3DGS 三、Director3D 1、Cinematographer 2、Decorator 3、Detailer 4、Loss 一、概述 该论文提出利用真实世界数据集,设计一个从文本生成真实世界3D场景和自适应相机轨迹的强大的开放世界文本到3D生成框架…

067_基于springboot的HSK学习平台

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

【进阶OpenCV】 (18)-- Dlib库 --人脸关键点定位

文章目录 人脸关键点定位一、作用二、原理三、代码实现1. 构造人脸检测器2. 载入模型(加载预测器)3. 获取关键点4. 显示图像5. 完整代码 总结 人脸关键点定位 在dlib库中,有shape_predictor_68_face_landmarks.dat预测器,这是一个…

安装vue发生异常: idealTree:nodejs: sill idealTree buildDeps

一、异常 C:\>npm install vue -g npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIREDnpm ERR! request to https://registry.npm.taobao.org/vue failed, reason: certificate has expired 二、原因 请求 https://registry.npm.taobao.org 失败,证…

Spring Boot与Flyway实现自动化数据库版本控制

一、为什么使用Flyway 最简单的一个项目是一个软件连接到一个数据库,但是大多数项目中我们不仅要处理我们开发环境的副本,还需要处理其他很多副本。例如:开发环境、测试环境、生产环境。想到数据库管理,我们立刻就能想到一系列问…

网站漏扫:守护网络安全的关键防线

网站漏洞扫描,简称漏扫,是一种针对网站进行漏洞检测的安全服务。网站漏洞扫描在网络安全中占据着至关重要的地位。 网站漏扫在及时发现和修复漏洞方面发挥着关键作用 通过对网站和系统的全面扫描,能够快速识别出各种潜在的漏洞,…

jmeter中发送post请求遇到的问题

用jmeter发送post请求,把请求参数放在Body Data处,参数都写得正确,但没想到结果每次都报错,直接响应结果乱七八糟,改成用Parameters,反而不乱报错了。 上图 请求里如下 另外一些请求也是这样 这个响应结果也是错误的…

【文献及模型、制图分享】长江中游经济区“水—能源—粮食”系统与城市绿色转型适配性研究

文献介绍 评价资源系统与城市绿色发展适配程度是判断城市健康程度的关键。通过构建“系统压力指数—优劣解距离法(TOPSIS)—脱钩弹性模型(Tapio)”评价体系,对2012—2021年长江中游经济区“水—能源—粮食”&#xff…