HarmonyOS开发案例:【生活健康app之编写通用工具类】(5)

本节将介绍日志打印、时间换算等通用工具类的编写和使用,工具类可以简化应用代码编写和业务流程处理。

日志类

日志类Logger旨在提供一个全局的日志打印、日志管理的地方,既可以规范整个应用的日志打印,也方便日后对日志工具类进行修改,而不需要去改动代码中每一个调用日志的地方,如切换具体的日志实现类(比如不使用Console而是HiLog),将日志记录到本地文件等。

Logger对外的日志API全部使用静态方法,方便调用者使用,目前分verbose,debug,info,warn,error五个级别。

开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

使用方法如下:

  1. import Logger日志类:

    import { Logger } from '../utils/log/Logger';
    
  2. 调用对应级别的静态方法:

    Logger.debug('MyAbilityStage', 'onCreate');
    

3、Logger类中包括debug、info、warn、error,具体内容如下:

// Logger.ets  
import hilog from '@ohos.hilog';const LOGGER_PREFIX: string = 'Healthy_life';class Logger {private domain: number;private prefix: string;...constructor(prefix: string = '', domain: number = 0xFF00) {this.prefix = prefix;this.domain = domain;}debug(...args: string[]): void {hilog.debug(this.domain, this.prefix, this.format, args);}info(...args: string[]): void {hilog.info(this.domain, this.prefix, this.format, args);}warn(...args: string[]): void {hilog.warn(this.domain, this.prefix, this.format, args);}error(...args: string[]): void {hilog.error(this.domain, this.prefix, this.format, args);}
}export default new Logger(LOGGER_PREFIX, 0xFF02);

时间工具

为全局提供时间工具,避免重复定义。

  1. 常用时间相关常量:
  // Utils.etsconst CHINESE_OF_WEEK: string[] = ['一', '二', '三', '四', '五', '六', '日'];const YEAR: string = '年';const MONTH: string = '月';const DAY: string = '日';const WEEK: string = '星期';DAYS_OF_WEEK: number = 7;const SUNDAY_FIRST_SHIFT: number = 6;
  1. 时间函数示例(由时间常量衍生出星期一到星期日和数字 1-7 的字典映射):
// Utils.ets
export const oneWeekDictFunc = () => {const oneWeekDict: Array<string> = [];for (let index = 0;index < CHINESE_OF_WEEK.length; index++) {oneWeekDict[index] = `${WEEK}${CHINESE_OF_WEEK[index]}`;}return oneWeekDict;
}

单位转换工具

把比例等分浮点数转换为百分比字符串。

例如成就页面,每一行平均分布三个徽章,可以先定义一个浮点数代表等分比例,再转换为百分比字符串。

// Utils.ets
export function ratio2percent(ratio: number): string {return `${ratio * 100}%`;
}

使用方法如下:

  1. import 工具方法:

    import { ratio2percent } from '../common/utils/Utils'
    
  2. 引用工具方法 ( 例如成就页面,每个徽章占据屏幕宽度的三分之一 ) :

    // BadgeCardComponent.ets
    Column({space: commonConst.DEFAULT_18}) { ...  // 省略徽章卡片的 UI 布局细节
    }
    .width(ratio2percent(Const.ACHIEVE_SPLIT_RATIO)) // achieveConst.ACHIEVE_SPLIT_RATIO = 1 / 3
    

事件分发类

事件分发类提供应用全局的事件注册,分发,接受,可以实现组件之间的解耦。

事件分发类全局共享一个实例, 将事件处理统一管理(HealthDataSrcMgr是单例):

获取事件分发实例:

// HomeComponent.ets
@Provide broadCast: BroadCast = HealthDataSrcMgr.getInstance().getBroadCast();// HealthDataSrcMgr.ets
public getBroadCast(): BroadCast {return this.broadCast;
}

事件注册:

// CustomDialogView.ets
aboutToAppear() {Logger.debug('CustomDialogView', 'aboutToAppear'); // 成就对话this.broadCast.on(BroadCastType.SHOW_ACHIEVEMENT_DIALOG, (achievementLevel: number) => {Logger.debug('CustomDialogView', 'SHOW_ACHIEVEMENT_DIALOG');this.achievementLevel = achievementLevel;this.achievementDialog.open();});// 任务时钟对话框this.broadCast.on(BroadCastType.SHOW_TASK_DETAIL_DIALOG,(currentTask: TaskInfo, dialogCallBack: CustomDialogCallback) => {Logger.debug('CustomDialogView', 'SHOW_TASK_DETAIL_DIALOG');this.currentTask = currentTask || TaskItem;this.dialogCallBack = dialogCallBack;this.taskDialog.open();});
}// BroadCast.ets
public on(event: string, callback: Function) {Logger.info(FILE_TAG, 'register broadcast with type '+ event);switch (event) {case BroadCastType.SHOW_ACHIEVEMENT_DIALOG:this.callBackArray.showAchievementDialog = callback;break;case BroadCastType.SHOW_TASK_DETAIL_DIALOG:this.callBackArray.showTaskDetailDialog = callback;break;case BroadCastType.SHOW_TARGET_SETTING_DIALOG:this.callBackArray.showTargetSettingDialog = callback;break;case BroadCastType.SHOW_REMIND_TIME_DIALOG:this.callBackArray.showRemindTimeDialog = callback;break;case BroadCastType.SHOW_FREQUENCY_DIALOG:this.callBackArray.showFrequencyDialog = callback;break;default:break;}
}

取消事件注册:

// TaskDetailComponent.ets
aboutToAppear() {this.broadCast.off(BroadCastType.SHOW_TARGET_SETTING_DIALOG, () => {});this.broadCast.off(BroadCastType.SHOW_REMIND_TIME_DIALOG, () => {});this.broadCast.off(BroadCastType.SHOW_FREQUENCY_DIALOG, () => {});
}// BroadCast.ets
public off(event: string, callback: Function) {if (event === null) {Logger.info(FILE_TAG, 'cancel all broadcast');this.callBackArray = callBackArrayTemp;}Logger.info(FILE_TAG, 'cancel broadcast with type '+ event);const cbs = this.callBackArray;if (!cbs) {return;}if (callback === null) {switch (event) {case BroadCastType.SHOW_ACHIEVEMENT_DIALOG:this.callBackArray.showAchievementDialog = () => {};break;case BroadCastType.SHOW_TASK_DETAIL_DIALOG:this.callBackArray.showTaskDetailDialog = () => {}; break;case BroadCastType.SHOW_TARGET_SETTING_DIALOG:this.callBackArray.showTargetSettingDialog = () => {};break;case BroadCastType.SHOW_REMIND_TIME_DIALOG: this.callBackArray.showRemindTimeDialog = () => {};break;case BroadCastType.SHOW_FREQUENCY_DIALOG:this.callBackArray.showFrequencyDialog = () => {};break;default:break;}}
}`HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿`

搜狗高速浏览器截图20240326151344.png

发送事件:

// HomeComponent.ets
taskItemAction(item: TaskInfo, isClick: boolean): void {if (!this.homeStore.checkCurrentDay()) {return;}if (isClick) {// 点击时钟let callback: CustomDialogCallback = { confirmCallback: (taskTemp: TaskInfo) => {this.onConfirm(taskTemp)}, cancelCallback: () => {} };this.broadCast.emit(BroadCastType.SHOW_TASK_DETAIL_DIALOG, [item, callback]);} else {// 编辑任务let editTaskStr: string = JSON.stringify(TaskMapById[item.taskID - 1]);let editTask: ITaskItem = JSON.parse(editTaskStr);editTask.targetValue = item?.targetValue;editTask.isAlarm = item.isAlarm;editTask.startTime = item.startTime;editTask.frequency = item.frequency;editTask.isOpen = item.isOpen;router.pushUrl({ url: 'pages/TaskEditPage', params: { params: JSON.stringify(editTask) } });}
}

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

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

相关文章

论文阅读:The Unreasonable Ineffectiveness of the Deeper Layers 层剪枝与模型嫁接的“双生花”

作者实证研究了针对流行的开放式预训练 LLM 系列的简单层修剪策略&#xff0c;发现在不同的 QA 基准上&#xff0c;直到去掉一大部分&#xff08;最多一半&#xff09;层&#xff08;Transformer 架构&#xff09;后&#xff0c;性能的下降才会降到最低。为了修剪这些模型&…

大模型面试常考知识点2

文章目录 1. LLM推理attention优化技术KV CachePageAttention显存优化MHA\GQA\MQA优化技术FlashAttention优化技术稀疏Attention1. Atrous Self Attention2. Local Self Attention3. Sparse Self Attention 2. LLM数据处理关键去重多样性保证构造扩充数据充分利用数据 参考文献…

知识库文档系统源码部署/搭建/上线/运营/售后/更新

一款基于ThinkPHPFastAdmin开发的知识库文档系统&#xff0c;可用于企业工作流程的文档管理&#xff0c;结构化记录沉淀高价值信息&#xff0c;形成完整的知识体系&#xff0c;能够轻松提升知识的流转和传播效率&#xff0c;更好地成就组织和个人。为部门、团队或项目搭建知识库…

监控员工上网用什么软件,4款优秀的上网行为监控软件优选

很多员工都会对工作有懈怠心理。 在数字化办公环境中&#xff0c;员工的上网行为直接影响着工作效率、信息安全与合规运营。 为确保企业资源合理利用、防止潜在风险&#xff0c;上网行为监控软件成为企业管理的重要辅助工具。 本文将为您推荐五款优秀的上网行为监控软件&#…

分布式事务技术方案

什么是分布式事务 一次课程发布操作需要向数据库、redis、elasticsearch、MinIO写四份数据&#xff0c;这里存在分布式事务问题。 什么是分布式事务&#xff1f; 首先理解什么是本地事务&#xff1f; 平常我们在程序中通过spring去控制事务是利用数据库本身的事务特性来实现…

Spring Framework-简介

Spring Framework Java Spring是一个开源的Java应用框架&#xff0c;它的主要目的是简化企业级应用开发的复杂性。Spring框架为开发者提供了许多基础功能&#xff0c;使得开发者能够更专注于业务逻辑的实现&#xff0c;而不是底层的细节。 主要特点和功能&#xff1a; 控制反…

AI自动直播,仅需一部手机解决直播痛点,全自动带货卖券系统!

AI自动直播&#xff0c;仅需一部手机解决直播痛点&#xff0c;全自动带货卖券系统&#xff01; 什么是AI自动直播带货系统&#xff1f; 一款只需要放在商家店内就开自动直播的软件&#xff0c;全自动24小时直播&#xff0c;只需要一部手机&#xff0c;就可以形成为门店曝光&a…

历史人物数字人如何成为地方文化推广大使?

如今&#xff0c;文旅产业业态已经从“打卡式旅游”逐渐走向“体验型旅游”转变。数字人可以为游客提供情绪价值、引起情感共鸣的文化体验。不少文旅品牌通过打造历史人物数字人&#xff0c;将城市民俗风情、非物质文化遗产等相结合&#xff0c;并且结合AI交互数字人的人机对话…

数据结构之图——探索图论的奥秘

前言 在这篇文章中&#xff0c;我们一起来看看我们生活中都会用到&#xff0c;但却不那么熟悉的数据结构——图&#xff08;英语&#xff1a;graph&#xff09;。我们看下百科定义&#xff1a; 在计算机科学中&#xff0c;图&#xff08;英语&#xff1a;graph&#xff09;是一…

Istio 使用 Apache SkyWalking 进行服务链路追踪、链路监控告警

一、Istio 使用 Apache SkyWalking 链路追踪和告警 SkyWalking是一个开源的观测平台&#xff0c;用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据&#xff0c;SkyWalking 提供了一种简便的方式来清晰地观测分布式系统&#xff0c;甚至可以观测横跨不同云的系统…

10分钟解决你电脑带不动3dmax渲染的问题‼️

你是否经常遇到这样的窘境&#xff1a; “创意如泉涌&#xff0c;操作如猛虎&#xff0c;却在渲染的关键时刻遭遇电脑崩溃&#xff0c;且发现工作成果未保存…” “在作业截止日期临近时&#xff0c;你的笔记本电脑突然罢工&#xff0c;迫使你不得不在网吧度过漫漫长夜来完成…

【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT

本文参加百度的有奖征文活动&#xff0c;更主要的也是借此机会去体验一下 AI 生成 PPT 的产品的现状&#xff0c;因此本文是设身处地从用户的角度去体验、使用这个产品&#xff0c;并反馈最真实的建议和意见&#xff0c;除了明确该产品的优点之外&#xff0c;也发现了不少缺陷和…