0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開(kāi)發(fā)案例:【生活健康app之編寫(xiě)通用工具類(lèi)】(5)

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-11 09:58 ? 次閱讀

本節(jié)將介紹日志打印、時(shí)間換算等通用工具類(lèi)的編寫(xiě)和使用,工具類(lèi)可以簡(jiǎn)化應(yīng)用代碼編寫(xiě)和業(yè)務(wù)流程處理。

日志類(lèi)

日志類(lèi)Logger旨在提供一個(gè)全局的日志打印、日志管理的地方,既可以規(guī)范整個(gè)應(yīng)用的日志打印,也方便日后對(duì)日志工具類(lèi)進(jìn)行修改,而不需要去改動(dòng)代碼中每一個(gè)調(diào)用日志的地方,如切換具體的日志實(shí)現(xiàn)類(lèi)(比如不使用Console而是HiLog),將日志記錄到本地文件等。

Logger對(duì)外的日志API全部使用靜態(tài)方法,方便調(diào)用者使用,目前分verbose,debug,info,warn,error五個(gè)級(jí)別。

開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
使用方法如下:

  1. import Logger日志類(lèi):
    import { Logger } from '../utils/log/Logger';
    
  2. 調(diào)用對(duì)應(yīng)級(jí)別的靜態(tài)方法:
    Logger.debug('MyAbilityStage', 'onCreate');
    

3、Logger類(lèi)中包括debug、info、warn、error,具體內(nèi)容如下:

// 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);

時(shí)間工具

為全局提供時(shí)間工具,避免重復(fù)定義。

  1. 常用時(shí)間相關(guān)常量:
// Utils.ets
  const 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. 時(shí)間函數(shù)示例(由時(shí)間常量衍生出星期一到星期日和數(shù)字 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;
}

單位轉(zhuǎn)換工具

把比例等分浮點(diǎn)數(shù)轉(zhuǎn)換為百分比字符串。

例如成就頁(yè)面,每一行平均分布三個(gè)徽章,可以先定義一個(gè)浮點(diǎn)數(shù)代表等分比例,再轉(zhuǎn)換為百分比字符串。

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

使用方法如下:

  1. import 工具方法:
    import { ratio2percent } from '../common/utils/Utils'
    
  2. 引用工具方法 ( 例如成就頁(yè)面,每個(gè)徽章占據(jù)屏幕寬度的三分之一 ) :
    // BadgeCardComponent.ets
    Column({space: commonConst.DEFAULT_18}) { 
      ...  // 省略徽章卡片的 UI 布局細(xì)節(jié)
    }
    .width(ratio2percent(Const.ACHIEVE_SPLIT_RATIO)) // achieveConst.ACHIEVE_SPLIT_RATIO = 1 / 3
    

事件分發(fā)類(lèi)

事件分發(fā)類(lèi)提供應(yīng)用全局的事件注冊(cè),分發(fā),接受,可以實(shí)現(xiàn)組件之間的解耦。

事件分發(fā)類(lèi)全局共享一個(gè)實(shí)例, 將事件處理統(tǒng)一管理(HealthDataSrcMgr是單例):

獲取事件分發(fā)實(shí)例:

// HomeComponent.ets
@Provide broadCast: BroadCast = HealthDataSrcMgr.getInstance().getBroadCast();

// HealthDataSrcMgr.ets
public getBroadCast(): BroadCast {
  return this.broadCast;
}

事件注冊(cè):

// CustomDialogView.ets
aboutToAppear() {
  Logger.debug('CustomDialogView', 'aboutToAppear'); 
  // 成就對(duì)話
  this.broadCast.on(BroadCastType.SHOW_ACHIEVEMENT_DIALOG, (achievementLevel: number) = > {
    Logger.debug('CustomDialogView', 'SHOW_ACHIEVEMENT_DIALOG');
    this.achievementLevel = achievementLevel;
    this.achievementDialog.open();
  });

  // 任務(wù)時(shí)鐘對(duì)話框
  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;
  }
}

取消事件注冊(cè):

// 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;
    }
  }
}

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

搜狗高速瀏覽器截圖20240326151344.png

發(fā)送事件:

// HomeComponent.ets
taskItemAction(item: TaskInfo, isClick: boolean): void {
  if (!this.homeStore.checkCurrentDay()) {
    return;
  }
  if (isClick) {
    // 點(diǎn)擊時(shí)鐘
    let callback: CustomDialogCallback = { confirmCallback: (taskTemp: TaskInfo) = > {
      this.onConfirm(taskTemp)
      }, cancelCallback: () = > {
      } };
    this.broadCast.emit(BroadCastType.SHOW_TASK_DETAIL_DIALOG, [item, callback]);
  } else {
    // 編輯任務(wù)
    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) } });
  }
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2291

    瀏覽量

    42631
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1956

    瀏覽量

    29903
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3611

    瀏覽量

    15959
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開(kāi)發(fā)案例:【常用組件與布局】

    HarmonyOS ArkUI提供了豐富多樣的UI組件,您可以使用這些組件輕松地編寫(xiě)出更加豐富、漂亮的界面。
    的頭像 發(fā)表于 05-09 18:20 ?1093次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【常用組件與布局】

    HarmonyOS開(kāi)發(fā)案例:【生活健康app之首頁(yè)啟動(dòng)】(1)

    用戶可以創(chuàng)建最多6個(gè)健康生活任務(wù)(早起,喝水,吃蘋(píng)果,每日微笑,刷牙,早睡),并設(shè)置任務(wù)目標(biāo)、是否開(kāi)啟提醒、提醒時(shí)間、每周任務(wù)頻率。
    的頭像 發(fā)表于 05-10 11:49 ?824次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【<b class='flag-5'>生活</b><b class='flag-5'>健康</b><b class='flag-5'>app</b>之首頁(yè)啟動(dòng)】(1)

    如何優(yōu)雅地開(kāi)發(fā)HarmonyOS APP應(yīng)用

    ` 本帖最后由 軟通動(dòng)力HOS 于 2021-3-10 15:29 編輯 研究HarmonyOS有一段時(shí)間了,今天主要結(jié)合自己多年的項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)和各種技術(shù)棧結(jié)合HarmonyOS APP
    發(fā)表于 03-10 15:13

    Linux應(yīng)用開(kāi)發(fā)手冊(cè)Python開(kāi)發(fā)案

    本文檔涉及的開(kāi)發(fā)案例位于產(chǎn)品資料“4-軟件資料\Demo\”路徑下的base-demos和python-demos目錄。base-demos目錄存放Linux常用開(kāi)發(fā)案例,案例bin目錄存放
    發(fā)表于 05-11 10:21

    harmonyOS開(kāi)發(fā)APP如何訪問(wèn)Webservice?

    我接到一個(gè)項(xiàng)目,需要用到HarmonyOS開(kāi)發(fā)APP做為移動(dòng)手機(jī)查詢和收到報(bào)警數(shù)據(jù),具體是這樣的,在C/S加B/S的系統(tǒng)框架下我們有數(shù)據(jù)庫(kù)服務(wù)器和Web服務(wù)器,有widows桌面應(yīng)用和Web瀏覽器
    發(fā)表于 03-28 10:14

    鴻蒙智聯(lián)生態(tài)產(chǎn)品《接入智慧生活App開(kāi)發(fā)指導(dǎo)》(官方更新版)

    HarmonyOS Connect生態(tài)產(chǎn)品應(yīng)用開(kāi)發(fā)過(guò)程中,很多開(kāi)發(fā)者對(duì)于如何接入智慧生活App還存在一些疑問(wèn),如:如何選擇合適的
    發(fā)表于 04-26 15:00

    4天帶你上手HarmonyOS ArkUI開(kāi)發(fā)——《HarmonyOS ArkUI入門(mén)訓(xùn)練營(yíng)健康生活實(shí)戰(zhàn)》

    HarmonyOS ArkUI入門(mén)訓(xùn)練營(yíng)健康飲食應(yīng)用》是面向入門(mén)開(kāi)發(fā)者打造的實(shí)戰(zhàn)課程系列。特邀華為終端BG高級(jí)開(kāi)發(fā)工程師作為本次訓(xùn)練營(yíng)講
    發(fā)表于 01-05 11:49

    Java常用工具類(lèi)

    Java常用工具類(lèi)。
    發(fā)表于 11-06 11:21 ?1次下載

    頻率計(jì)數(shù)器仍然是通用工具

    頻率計(jì)數(shù)器仍然是通用工具,有需要的下來(lái)看看
    發(fā)表于 08-17 11:13 ?10次下載

    整合資源類(lèi)APP開(kāi)發(fā)

    資源類(lèi)APP開(kāi)發(fā)能為用戶帶來(lái)什么?  整合資源類(lèi)APP就是讓人們找到有共同消費(fèi)需求的人,用碎片的模式來(lái)滿足用戶各種
    發(fā)表于 06-28 14:49 ?492次閱讀

    App開(kāi)發(fā)案例教程PDF電子書(shū)免費(fèi)下載

    App開(kāi)發(fā)案例教程》通過(guò)一個(gè)實(shí)例,介紹App設(shè)計(jì)、開(kāi)發(fā)直至上線的全過(guò)程,引導(dǎo)讀者在較短時(shí)間內(nèi)熟悉一個(gè)較大規(guī)模的App應(yīng)用系統(tǒng)的
    發(fā)表于 08-05 08:00 ?38次下載
    <b class='flag-5'>App</b><b class='flag-5'>開(kāi)發(fā)案</b>例教程PDF電子書(shū)免費(fèi)下載

    華為開(kāi)發(fā)者分論壇HarmonyOS學(xué)生公開(kāi)課-OpenHarmony Codelabs開(kāi)發(fā)案

    2021華為開(kāi)發(fā)者分論壇HarmonyOS學(xué)生公開(kāi)課-OpenHarmony Codelabs開(kāi)發(fā)案
    的頭像 發(fā)表于 10-24 11:25 ?1853次閱讀
    華為<b class='flag-5'>開(kāi)發(fā)</b>者分論壇<b class='flag-5'>HarmonyOS</b>學(xué)生公開(kāi)課-OpenHarmony Codelabs<b class='flag-5'>開(kāi)發(fā)案</b>例

    單片機(jī)開(kāi)發(fā)使用工具LED查詢軟件

    單片機(jī)開(kāi)發(fā)使用工具LED查詢軟件
    發(fā)表于 12-16 16:59 ?1次下載

    如何接入智慧生活App

     在HarmonyOS Connect生態(tài)產(chǎn)品應(yīng)用開(kāi)發(fā)過(guò)程中,很多開(kāi)發(fā)者對(duì)于如何接入智慧生活App還存在一些疑問(wèn),如:如何選擇合適的
    的頭像 發(fā)表于 04-25 10:42 ?3536次閱讀
    如何接入智慧<b class='flag-5'>生活</b><b class='flag-5'>App</b>

    HarmonyOS開(kāi)發(fā)案例:【生活健康app獲取成就】(3)

    成就頁(yè)面展示用戶可以獲取的所有勛章,當(dāng)用戶滿足一定的條件時(shí),將點(diǎn)亮本頁(yè)面對(duì)應(yīng)的勛章,沒(méi)有得到的成就勛章處于熄滅狀態(tài)。共有六種勛章,當(dāng)用戶連續(xù)完成任務(wù)打卡3天、7天、30天、50天、73天、99天時(shí),可以獲得對(duì)應(yīng)的“連續(xù)xx天達(dá)成”勛章。
    的頭像 發(fā)表于 05-10 17:18 ?274次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【<b class='flag-5'>生活</b><b class='flag-5'>健康</b><b class='flag-5'>app</b><b class='flag-5'>之</b>獲取成就】(3)