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

news2024/12/24 10:18:35

首选项

简介

本示例使用@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 Context
    preferenceTheme = 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://www.coloradmin.cn/o/1963136.html

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

相关文章

【简历】广东某二本大学:JAVA秋招简历指导,简历通过率比较低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届二本Java同学的简历。二本同学因为学校本身不是特别出彩&#xff0c;求职目标基本是小公司。并且这个同学项目部分重复度非…

Python环境搭建与PyCharm安装激活教程

一、Python环境搭建 标题&#xff1a;下载Python解释器 步骤1&#xff1a;访问Python官网 打开浏览器&#xff0c;输入Python官方网站地址&#xff1a;Welcome to Python.org。 步骤2&#xff1a;下载Python安装包 将鼠标移动到Downloads菜单上&#xff0c;选择适合你操作…

【区块链+绿色低碳】北京:全国首例区块链 + 绿色出行项目 | FISCO BCOS应用案例

在 2021 年全国两会上&#xff0c;“碳达峰”和“碳中和”被首次写入《政府工作报告》&#xff0c;我国争取在 2030 年前实现“碳达峰”&#xff0c; 2060 年前实现“碳中和”。随着经济社会的快速发展、工业化和城镇化进程不断加快&#xff0c;交通运输领域作为碳排放“大 户”…

智能小家电的跨境渠道有哪些?入驻百思买还是选择做亚马逊?——WAYLI威利跨境助力商家

在全球化贸易背景下&#xff0c;智能小家电企业面临机遇与挑战。消费者追求高品质生活&#xff0c;智能小家电市场需求旺盛&#xff0c;跨境销售成为拓展市场、提升品牌影响力的关键。选择合适的跨境渠道至关重要。以下是智能小家电跨境销售的主要渠道&#xff0c;并深入分析了…

爆款!288页Python核心知识笔记(附思维导图,建议收藏)

不少朋友在学习Python时&#xff0c;都会做大量的笔记&#xff0c;随着学习进度的增加&#xff0c;笔记越来越厚&#xff0c;但有效内容反而越来越少。 今天就给大家分享一份288页Python核心知识笔记&#xff0c;相较于部分朋友乱糟糟的笔记&#xff0c;这份笔记更够系统地总结…

对JAVA的包package的理解

一直理解不了java中的包&#xff0c;包括下图中的这种在几乎每个java程序的开头都有的import和package。今天在实际应用中突然理解了。 第一行代码 package org.example 是用来标识当前这个Java文件属于org.example。这里说明一下&#xff0c;通常一个.java文件就是一个Java类…

【Webpack 踩坑】img 标签图片加载不出来

问题&#xff1a;在html的img标签路径解析错误&#xff0c;导致加载不出来 一直用框架开发&#xff0c;好久没用过webpack写原生代码&#xff0c;一下子踩了好多坑… 图片位置&#xff1a; 其中一个就是在html中写了图片地址&#xff1a; <!-- src/pages/index.html --&…

鸿蒙(HarmonyOS)DatePicker+TimePicker时间选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0&#xff08;API 9&#xff09; 二、效果图 可实现两种选择方式&#xff0c;可带时分选择&#xff0c;也可不带&#xff0c;使用更加方便。 三、代码 SelectedDateDialog…

Qt for MCUs 2.8 LTS已发布

本文翻译自&#xff1a;Qt for MCUs 2.8 LTS released 原文作者&#xff1a;Qt Group高级产品经理Yoann Lopes 我们很高兴地宣布Qt for MCUs 2.8 LTS版本已发布&#xff0c;该版本带来了激动人心的新变化&#xff0c;如GUI的构建模块、构建工具工作流程的改进、对Infineon TRA…

书生大模型实战营闯关 - 8GB显存玩转书生大模型demo

创建开发机 创建一个使用10%GPU算力&#xff0c;cuda12.2系统的开发机&#xff0c;并启动。由于开发机的IO性能较差&#xff0c;开发机共享盘中已经创建好了本次实验所需要的conda环境 # 启动共享的conda环境 conda activate /root/share/pre_envs/icamp3_demo部署cli模型 创…

解读Solana流动性质押发展现状:市场格局的悄然转变

随着区块链技术的发展和去中心化金融&#xff08;DeFi&#xff09;生态系统的壮大&#xff0c;流动性质押&#xff08;Liquid Staking&#xff09;已经成为市场中的热门话题。尽管以太坊在这一领域占据了主导地位&#xff0c;但Solana也在快速追赶&#xff0c;并展现出其独特的…

微服务事务管理(分布式事务问题 理论基础 初识Seata XA模式 AT模式 )

目录 一、分布式事务问题 1. 本地事务 2. 分布式事务 3. 演示分布式事务问题 二、理论基础 1. CAP定理 1.1 ⼀致性 1.2 可⽤性 1.3 分区容错 1.4 ⽭盾 2. BASE理论 3. 解决分布式事务的思路 三、初识Seata 1. Seata的架构 2. 部署TC服务 3. 微服务集成Se…

通俗易懂生成式人工智能(Generative AI)

生成式人工智能&#xff08;Generative AI&#xff09; 人工智能是目标&#xff0c;生成式人工智能就是我们的目标之一。 基本概念 什么是生成式人工智能&#xff1f; 生成式人工智能就是让机器产生复杂的、有结构的物件&#xff0c;如&#xff1a;文本、语音、图像等。而这…

笔试练习day1

目录 数字统计题目解析解法(枚举数字拆分)代码 两个数组的交集题目解析解法哈希表代码 点击消除题目解析解法栈代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f97…

4 款最佳 C# 无头浏览器

摘要&#xff1a; 在当今大数据时代&#xff0c;高效的数据采集成为众多项目的关键一环。对于偏好C#语言的开发者而言&#xff0c;无头浏览器是实现网页自动化交互、数据抓取的强大工具。本文将深入探讨四款顶尖的C#无头浏览器库&#xff0c;分析它们的特性和应用场景&#xf…

No J-Link found

线拔了&#xff0c;重插即可&#xff0c;顺便按按板子上的按钮 这里配置如下图

根据需求修改el-tab的默认样式

根据需求修改el-tab的默认样式 样式代码&#xff1a; <style lang"scss" scoped>//去掉了最下面的那条线:deep(.el-tabs--card > .el-tabs__header){border-bottom: none}//单独给每一项添加下边框、修改背景色:deep(.el-tabs--card > .el-tabs__heade…

多人协作不“撞车”,可道云teamOS网盘的编辑锁功能你知道吗?

在团队协作的世界里&#xff0c;文件编辑就像是一条繁忙的街道&#xff0c;每个人都是驾驶者&#xff0c;试图在文件上留下自己的痕迹。想象一下&#xff0c;如果没有任何规则和秩序&#xff0c;这条街道将会是一片混乱&#xff0c;编辑冲突和版本“撞车”将会频频发生。 今天…

Gartner发布2024年数据安全成熟度曲线:人工智能和量子计算驱动的32项数据安全相关技术发展变化

安全和风险管理领导者正在为当今人工智能和未来量子计算的影响做准备。合成数据、后量子密码学和此技术成熟度曲线上的其他创新可以帮助降低数据安全和隐私风险并实现业务目标。 需要知道的 过去几年&#xff0c;随着人工智能的使用以及隐私和人工智能相关立法的不断加强&…

idea mapper.xml跳转到databse对应的表或字段

idea mapper.xml跳转到databse对应的表或字段 1、安装Database Navigator插件 2、配置数据类型 setting- > language -> sql Dialects中 的选项设为 对应的数据库 3、链接数据库