鸿蒙应用框架开发【首选项】 本地数据与文件

首选项

简介

本示例使用@ohos.data.preferences接口,展示了使用首选项持久化存储数据的功能。

效果预览

1

使用说明

1.点击顶部titleBar的右侧切换按钮,弹出主题菜单,选择任意主题则切换相应的主题界面;

2.退出应用再重新进入,显示上一次退出前的主题界面。

具体实现

  • 切换主题:在首页预先设置好几套主体数据,使用preferences.getPreferences获取使用Preferences对象,调用Preferences.get() 读取缓存中的参数,得到当前应该展示哪一套主体。每次点击切换按钮都会调用Preferences.put()来重新修改参数,然后使用 Preferences.flush()保存并刷新文件内容。 源码参考:[Index.ets] 。
/** Copyright (c) 2024 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import { emitter } from '@kit.BasicServicesKit';
import { preferences } from '@kit.ArkData';
import Logger from '../model/Logger';
import ThemeDesktop from '../common/ThemeDesktop';export interface ImageAndName {image: Resource;name: string;
}const THEMES: Array<ImageAndName>[] = [[{ image: $r('app.media.dialer'), name: '电话' },{ image: $r('app.media.shopping'), name: '商城' },{ image: $r('app.media.notes'), name: '备忘录' },{ image: $r('app.media.settings'), name: '设置' },{ image: $r('app.media.camera'), name: '相机' },{ image: $r('app.media.gallery'), name: '相册' },{ image: $r('app.media.music'), name: '音乐' },{ image: $r('app.media.video'), name: '视频' },],[{ image: $r('app.media.simplicityCall'), name: '电话' },{ image: $r('app.media.simplicityShop'), name: '商城' },{ image: $r('app.media.simplicityNotes'), name: '备忘录' },{ image: $r('app.media.simplicitySetting'), name: '设置' },{ image: $r('app.media.simplicityCamera'), name: '相机' },{ image: $r('app.media.simplicityPhotos'), name: '相册' },{ image: $r('app.media.simplicityMusic'), name: '音乐' },{ image: $r('app.media.simplicityVideo'), name: '视频' },],[{ image: $r('app.media.pwcall'), name: '电话' },{ image: $r('app.media.pwshop'), name: '商城' },{ image: $r('app.media.pwnotes'), name: '备忘录' },{ image: $r('app.media.pwsetting'), name: '设置' },{ image: $r('app.media.pwcamera'), name: '相机' },{ image: $r('app.media.pwphotos'), name: '相册' },{ image: $r('app.media.pwmusic'), name: '音乐' },{ image: $r('app.media.pwvideo'), name: '视频' },]
]
const TAG: string = '[Index]';
const PREFERENCES_NAME = 'theme.db';
const THEME_NAMES: string[] = ['default', 'simplicity', 'pomeloWhtie'];
let preferenceTheme: preferences.Preferences | null = null;@Entry
@Component
struct Index {@State nowTheme: string = '';@State themeDatas: Array<ImageAndName> = [];async aboutToAppear() {//从内存中获取轻量级存储db文件await this.getPreferencesFromStorage()//从轻量级存储db文件中获取键名为theme的键值this.nowTheme = await this.getPreference()console.info(`nowTheme__get ${this.nowTheme}`)emitter.emit({ eventId: 0, priority: 0 }, {data: {nowTheme: this.nowTheme}})let index = THEME_NAMES.indexOf(this.nowTheme)this.themeDatas = THEMES[index]}async getPreferencesFromStorage() {let context = getContext(this) as ContextpreferenceTheme = await preferences.getPreferences(context, PREFERENCES_NAME)}async putPreference(data: string) {Logger.info(TAG, `Put begin`)if (preferenceTheme !== null) {await preferenceTheme.put('theme', data)await preferenceTheme.flush()}}async getPreference(): Promise<string> {Logger.info(TAG, `Get begin`)let theme: string = ''if (preferenceTheme !== null) {theme = await preferenceTheme.get('theme', 'default') as string;return theme;}return theme;}changeTheme(themeNum: number) {this.themeDatas = THEMES[themeNum];this.putPreference(THEME_NAMES[themeNum]);}build() {Column() {Row() {Text($r('app.string.MainAbility_label')).fontSize(25).layoutWeight(5).padding({ left: 10 }).fontColor(Color.White).fontWeight(FontWeight.Bold)Image($r('app.media.change')).key('changeBtn').id('changeBtn').height(30).layoutWeight(1).objectFit(ImageFit.ScaleDown).bindMenu([{value: THEME_NAMES[0],action: () => {this.changeTheme(0)}},{value: THEME_NAMES[1],action: () => {this.changeTheme(1)}},{value: THEME_NAMES[2],action: () => {this.changeTheme(2)}}])}.width('100%').height(50).backgroundColor('#0D9FFB')ThemeDesktop({ themeDatas: $themeDatas })}.width('100%').height('100%')}
}

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!

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

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

相关文章

智能合约中approve函数详解

场景 这段时间很多小伙伴加我、都咨询到了一个类似的业务场景、 如下&#xff1a; 1、第一步业务里面调用授权函数approve 、给指定address2、第二步是由授权的address调用transferFrom转移给指定的接受地址。 案例DEMO如下&#xff08;这里test2肯定是会执行失败的&#xff…

相机标定(Camera Calibration)

什么是 相机标定&#xff08;Camera Calibration&#xff09;&#xff1f; 相机标定&#xff08;CameraCalibration&#xff09;是确定相机内部参数&#xff08;如焦距、光学中心、畸变系数等&#xff09;和外部参数&#xff08;如相机在世界坐标系中的位置和姿态&#xff09;的…

Jackson常用注解详解

Hi &#x1f44b;, Im shy 有人见尘埃&#xff0c;有人见星辰 Jackson常用注解详解 文章目录 Jackson常用注解详解0. 引入依赖1. JsonProperty2. JsonIgnore3. JsonFormat4. JsonInclude5. JsonCreator6. JsonValue7. JsonIgnoreProperties结论 Jackson是Java生态系统中广泛…

【Canvas与艺术】三环莫比乌斯圈

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>三环莫比乌斯圈</title><style type"text/css"&g…

插单现象对PMC造成的影响有哪些?

插单&#xff0c;即在生产制造过程中&#xff0c;客户或其他部门临时增加订单&#xff0c;这一行为如同战场上的突袭&#xff0c;让生产与物料控制&#xff08;PMC&#xff09;部门措手不及&#xff0c;面临着前所未有的压力和挑战。那么&#xff0c;插单现象究竟对PMC造成了哪…

【MATLAB源码-第239期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 孔雀优化算法&#xff08;Peafowl Optimization Algorithm&#xff0c;简称POA&#xff09;以孔雀&#xff08;peafowl&#xff09;的求偶展示行为为灵感&#xff0c;通过模拟这一过程来解决复杂的优化问题。以下是对孔雀优化…

深度揭秘——TCP/IP协议

今天我们要深入探讨一个关键的网络基础知识——TCP/IP协议。无论你是刚接触网络技术的新手&#xff0c;还是希望加深理解的老手&#xff0c;本文都将为你提供全面且易懂的介绍。 TCP/IP协议是一组用于互联网的通信协议的集合&#xff0c;包含了传输控制协议&#xff08;TCP&am…

大数据信用报告查询会不会留下查询记录?怎么选择查询平台?

最近有不少网友都在咨询一个问题&#xff0c;那就是大数据信用报告查询会不会留下查询记录&#xff0c;会不会对自己的征信产生影响&#xff0c;下面本文就详细为大家介绍一下&#xff0c;希望对你了解大数据信用有帮助。 首先、大数据信用与人行征信是独立的 很多人只知道人行…

哪款加密软件好用点?迅软DSE加密软件如何?

在选择加密软件时&#xff0c;好用与否往往取决于多个因素&#xff0c;包括&#xff1a;软件的功能、稳定性、安全性、易用性、兼容性以及性价比等。 针对大家提到的迅软DSE加密软件&#xff0c;以下是一些详细的分析&#xff1a; 一、功能全面 迅软DSE加密系统集成了文件加密…

编译环境搭建(Linux)

0 Preface/Foreword 0.1 System requirement Airoha编译环境&#xff0c;对于Linux distro&#xff0c;建议使用Ubuntu 18.04 1 环境搭建 1.1 Create a working folder 在Linux中&#xff0c;创建一个文件夹&#xff0c;用来存放Airoha释放过来的开发工具链安装包。 博主当…

[数据集][目标检测]船上翻越栏杆危险行为检测数据集VOC+YOLO格式3678张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3678 标注数量(xml文件个数)&#xff1a;3678 标注数量(txt文件个数)&#xff1a;3678 标注…

Linux中新添加的磁盘信息不显示-主动扫盘(刷新磁盘状态)

在Linux系统中&#xff0c;当你新添加了一个磁盘&#xff08;无论是通过物理添加还是虚拟化环境&#xff09;&#xff0c;你可能需要让系统识别这个新磁盘&#xff0c;并且可能需要更新或“刷新”磁盘的状态。这通常涉及到几个步骤&#xff0c;但没有一个直接的“刷新磁盘状态”…

CANoe:System Variables模块介绍

写了这么多文章介绍CANoe的功能和使用,发现竟然没有介绍系统变量模块的,这么重要的功能当然要单独写一篇文章介绍啦! 系统变量为CANoe提供了除数据库、环境变量外的另一种数据配置方式。在系统变量模块中定义的各种数据类型的变量,可以被CANoe其他模块或CAPL程序所引用。 …

四,系统规划

一&#xff0c;企业系统规划法BSP&#xff08;2009、2010、2018&#xff0c;步骤以及优缺点、用到的工具&#xff09; 企业系统规划法&#xff08;Business Systems Planning&#xff0c;BSP&#xff09;是IBM公司20世纪70年代提出的一种结构化的信息系统规划方法。该方法通过…

使用 Postman 进行 Trello API 自动化测试的完整指南

文章目录 前言一、自动化测试是什么&#xff1f;二、比较自动化测试与手工测试1. 自动化测试2. 手工测试 三、环境搭建1.创建Collection2.创建环境变量3.添加API请求 四、设计测试用例1. API简单调用2. 获取所有emoji3. 创建一个新看板&#xff1a;4. 获得创建的看板信息5. 在看…

四、GD32 MCU 常见外设介绍(14)

GD32 MCU内部提供了一个RTC&#xff08;实时时钟&#xff09;模块&#xff0c;通过RTC可以实现日历时钟、闹钟等功能。RTC也可以用于深度睡眠或待机模式的低功耗唤醒。不同系列的GD32 MCU在RTC设计和功能上有所区别&#xff0c;总体可以分为三大系列&#xff1a; &#xff08;…

springboot美食网站—计算机毕业设计源码11574

摘 要 随着人们生活水平的提高&#xff0c;人们对美食的要求也越来越高&#xff0c;对各类美食信息需求越来越大。因此&#xff0c;结合计算机快速发展、普及&#xff0c;在此基础上制作一个页面简单、美观,功能实用的美食网站势在必行&#xff0c;满足用户分享美食的需求。 美…

关于Handler你不知道的事

提到Handler&#xff0c;我们都会想到可以用来在子线程给UI线程发送消息&#xff0c;常用来子线程刷新UI。 而往深了问&#xff0c;你一定还知道Handler会绑定到一个Looper&#xff0c;而每个Looper会和一个MessageQ关联&#xff0c;从而达到向指定线程发送消息的功能。除此之外…

【计算机视觉学习之CV2图像操作实战:红绿灯识别1】

红绿灯识别1 步骤 高斯模糊边缘提取膨胀腐蚀中值滤波再次膨胀霍夫圆环检测区域将图片从BGR格式转换为HSV格式设计颜色阈值中值滤波统计像素点数 import cv2 import numpy as np COLOERS {red: (0, 0, 255),green: (0, 255, 0),yellow: (0, 255, 255), } def detect_color(im…