From 24e1dd80ffba85f82173983a6bf277bb6750ec5e Mon Sep 17 00:00:00 2001 From: Mike_lee Date: Mon, 24 Apr 2023 19:43:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=81=A5=E5=BA=B7=E7=94=9F?= =?UTF-8?q?=E6=B4=BB=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mike_lee --- ExcellentCase/Healthy_life/README.md | 468 ++++++++++++----------- ExcellentCase/Healthy_life/figures/1.png | Bin 0 -> 19678 bytes ExcellentCase/Healthy_life/figures/2.png | Bin 0 -> 47287 bytes ExcellentCase/Healthy_life/figures/3.png | Bin 0 -> 13349 bytes ExcellentCase/Healthy_life/figures/4.png | Bin 0 -> 18471 bytes 5 files changed, 237 insertions(+), 231 deletions(-) create mode 100644 ExcellentCase/Healthy_life/figures/1.png create mode 100644 ExcellentCase/Healthy_life/figures/2.png create mode 100644 ExcellentCase/Healthy_life/figures/3.png create mode 100644 ExcellentCase/Healthy_life/figures/4.png diff --git a/ExcellentCase/Healthy_life/README.md b/ExcellentCase/Healthy_life/README.md index 552117ed..25b544ac 100644 --- a/ExcellentCase/Healthy_life/README.md +++ b/ExcellentCase/Healthy_life/README.md @@ -19,9 +19,11 @@ ### 相关概念 -- [@Observed 和 @ObjectLink](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-state-mgmt-page-level.md#observed%E5%92%8Cobjectlink%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86):@Observed适用于类,表示类中的数据变化由UI页面管理;@ObjectLink应用于被@Observed装饰类的对象。 +- [@AppStorage](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-appstorage.md):应用程序中的单例对象,为应用程序范围内的可变状态属性提供中央存储。 -- [@Consume 和 @Provide](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-state-mgmt-page-level.md#consume%E5%92%8Cprovide):@Provide作为数据提供者,可以更新子节点的数据,触发页面渲染。@Consume检测到@Provide数据更新后,会发起当前视图的重新渲染。 +- [@Observed 和 @ObjectLink](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-observed-and-objectlink.md):@Observed适用于类,表示类中的数据变化由UI页面管理;@ObjectLink应用于被@Observed装饰类的对象。 + +- [@Consume 和 @Provide](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-provide-and-consume.md):@Provide作为数据提供者,可以更新子节点的数据,触发页面渲染。@Consume检测到@Provide数据更新后,会发起当前视图的重新渲染。 - [Flex](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-container-flex.md):一个功能强大的容器组件,支持横向布局,竖向布局,子组件均分和流式换行布局。 @@ -31,8 +33,6 @@ - [Toggle](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-toggle.md):组件提供勾选框样式、状态按钮样式及开关样式。 -- [后台代理提醒](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-reminderAgentManager.md):使用后台代理提醒能力后,应用可以被冻结或退出,计时和弹出提醒的功能将被后台系统服务代理。 - - [关系型数据库(Relational Database,RDB)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-data-rdb.md):一种基于关系模型来管理数据的数据库。 ## 环境搭建 @@ -69,80 +69,78 @@ 本篇Codelab只对核心代码进行讲解,完整代码可以直接从gitee获取。 ``` -├─entry/src/main/ets // 代码区 -│ ├─common -│ │ ├─bean -│ │ │ ├─ColumnInfo.ets // 数据库表结构 -│ │ │ ├─DayInfo.ets // 每日信息 -│ │ │ ├─GlobalInfo.ets // 全局信息 -│ │ │ └─TaskInfo.ets // 任务信息 -│ │ ├─constants -│ │ │ └─CommonConstants.ets // 公共常量 -│ │ ├─database -│ │ │ ├─rdb // 数据库 -│ │ │ │ ├─RdbHelper.ets -│ │ │ │ ├─RdbHelperImp.ets -│ │ │ │ ├─RdbUtil.ets -│ │ │ │ └─TableHelper.ets -│ │ │ ├─tables // 数据库接口 -│ │ │ │ ├─DayInfoApi.ets -│ │ │ │ ├─GlobalInfoApi.ets -│ │ │ │ └─TaskInfoApi.ets -│ │ │ └─Rdb.ets // RDB数据库 -│ │ ├─reminderagent -│ │ │ └─ReminderAgent.ets // 后台代理提醒接口 -│ │ └─utils -│ │ ├─Logger.ets // 日志类 -│ │ ├─BroadCast.ets // 通知 -│ │ ├─HealthDataSrcMgr.ets // 数据管理单例 -│ │ └─Utils.ets // 工具类 -│ ├─entryability -│ │ └─EntryAbility.ets // 程序入口类 -│ ├─model // model -│ │ ├─AchieveModel.ets -│ │ ├─DatabaseModel.ets // 数据库model -│ │ ├─Mine.ets -│ │ ├─NavItemModel.ets // 菜单栏model -│ │ ├─RdbColumnModel.ets // 数据库表数据 -│ │ ├─TaskInitList.ets -│ │ └─WeekCalendarModel.ets // 日历model -│ ├─pages -│ │ ├─AdvertisingPage.ets // 广告页 -│ │ ├─MainPage.ets // 应用主页面 -│ │ ├─MinePage.ets // 我的页面 -│ │ ├─SplashPage.ets // 启动页 -│ │ ├─TaskEditPage.ets // 任务编辑页面 -│ │ └─TaskListPage.ets // 任务列表页面 -│ ├─view -│ │ ├─dialog // 弹窗组件 -│ │ │ ├─AchievementDialog.ets // 成就弹窗 -│ │ │ ├─CustomDialogView.ets // 自定义弹窗 -│ │ │ ├─TaskDetailDialog.ets // 打卡弹窗 -│ │ │ ├─TaskSettingDialog.ets // 任务编辑相关弹窗 -│ │ │ └─UserPrivacyDialog.ets -│ │ ├─home // 主页面相关组件 -│ │ │ ├─AddBtnComponent.ets // 添加任务按钮组件 -│ │ │ ├─HomeTopComponent.ets // 首页顶部组件 -│ │ │ ├─TaskCardComponent.ets // 任务item组件件 -│ │ │ └─WeekCalendarComponent.ets // 日历组件 -│ │ ├─task // 任务相关组件 -│ │ │ ├─TaskDetailComponent.ets // 任务编辑详情组件 -│ │ │ ├─TaskEditListItem.ets // 任务编辑行内容 -│ │ │ └─TaskListComponent.ets // 任务列表组件 -│ │ ├─AchievementComponent.ets // 成就页面 -│ │ ├─BadgeCardComponent.ets // 勋章卡片组件 -│ │ ├─BadgePanelComponent.ets // 勋章面板组件 -│ │ ├─HealthTextComponent.ets // 自定义text组件 -│ │ ├─HomeComponent.ets // 首页页面 -│ │ ├─ListInfo.ets // 用户信息列表 -│ │ ├─TitleBarComponent.ets // 成就标题组件 -│ │ └─UserBaseInfo.ets // 用户基本信息 -│ └─viewmodel // viewmodel -│ ├─AchievementViewModel.ets // 成就相关模块 -│ ├─CalendarViewModel.ets // 日历相关模块 -│ ├─HomeViewModel.ets // 首页相关模块 -│ └─TaskViewModel.ets // 任务设置相关模块 -└─resources // 资源文件夹 +├──entry/src/main/ets // 代码区 +│ ├──common +│ │ ├──bean +│ │ │ ├──ColumnInfo.ets // 数据表信息接口 +│ │ │ ├──DayInfo.ets // 每日信息接口 +│ │ │ ├──GlobalInfo.ets // 全局信息接口 +│ │ │ └──TaskInfo.ets // 任务信息接口 +│ │ ├──constants +│ │ │ └──CommonConstants.ets // 公共常量 +│ │ ├──database +│ │ │ ├──rdb // 数据库封装类 +│ │ │ │ ├──RdbHelper.ets +│ │ │ │ ├──RdbHelperImp.ets +│ │ │ │ ├──RdbUtils.ets +│ │ │ │ └──TableHelper.ets +│ │ │ └──tables // 数据表 +│ │ │ ├──DayInfoApi.ets +│ │ │ ├──GlobalInfoApi.ets +│ │ │ └──TaskInfoApi.ets +│ │ └──utils +│ │ ├──Logger.ets // 日志类 +│ │ ├──BroadCast.ets // 通知 +│ │ ├──HealthDataSrcMgr.ets // 数据管理单例 +│ │ └──Utils.ets // 工具类 +│ ├──entryability +│ │ └──EntryAbility.ts // 程序入口类 +│ ├──model // model +│ │ ├──AchieveModel.ets +│ │ ├──DatabaseModel.ets // 数据库model +│ │ ├──Mine.ets +│ │ ├──NavItemModel.ets // 菜单栏model +│ │ ├──RdbColumnModel.ets +│ │ ├──TaskInitList.ets +│ │ └──WeekCalendarModel.ets // 日历model +│ ├──pages +│ │ ├──AdvertisingPage.ets // 广告页 +│ │ ├──MainPage.ets // 应用主页面 +│ │ ├──MinePage.ets // 我的页面 +│ │ ├──SplashPage.ets // 启动页 +│ │ ├──TaskEditPage.ets // 任务编辑页面 +│ │ └──TaskListPage.ets // 任务列表页面 +│ ├──view +│ │ ├──dialog // 弹窗组件 +│ │ │ ├──AchievementDialog.ets // 成就弹窗 +│ │ │ ├──CustomDialogView.ets // 自定义弹窗 +│ │ │ ├──TaskDetailDialog.ets // 打卡弹窗 +│ │ │ ├──TaskDialogView.ets +│ │ │ ├──TaskSettingDialog.ets // 任务编辑相关弹窗 +│ │ │ └──UserPrivacyDialog.ets +│ │ ├──home // 主页面相关组件 +│ │ │ ├──AddBtnComponent.ets // 添加任务按钮组件 +│ │ │ ├──HomeTopComponent.ets // 首页顶部组件 +│ │ │ ├──TaskCardComponent.ets // 任务item组件件 +│ │ │ └──WeekCalendarComponent.ets // 日历组件 +│ │ ├──task // 任务相关组件 +│ │ │ ├──TaskDetailComponent.ets // 任务编辑详情组件 +│ │ │ ├──TaskEditListItem.ets // 任务编辑行内容 +│ │ │ └──TaskListComponent.ets // 任务列表组件 +│ │ ├──AchievementComponent.ets // 成就页面 +│ │ ├──BadgeCardComponent.ets // 勋章卡片组件 +│ │ ├──BadgePanelComponent.ets // 勋章面板组件 +│ │ ├──HealthTextComponent.ets // 自定义text组件 +│ │ ├──HomeComponent.ets // 首页页面 +│ │ ├──ListInfo.ets // 用户信息列表 +│ │ ├──TitleBarComponent.ets // 成就标题组件 +│ │ └──UserBaseInfo.ets // 用户基本信息 +│ └──viewmodel // viewmodel +│ ├──AchievementViewModel.ets // 成就相关模块 +│ ├──CalendarViewModel.ets // 日历相关模块 +│ ├──HomeViewModel.ets // 首页相关模块 +│ └──TaskViewModel.ets // 任务设置相关模块 +└──entry/src/main/resources // 资源文件夹 ``` ## 应用架构分析 @@ -1153,7 +1151,7 @@ export function getBadgeCardsItems(successiveDays: number):[string, string][] { } ``` -## 搭建关系型数据库 +## 搭建关系数据库 本节将介绍如何调用关系型数据库接口在本地搭建数据库,并读写相应的用户数据。 @@ -1164,40 +1162,34 @@ export function getBadgeCardsItems(successiveDays: number):[string, string][] { 导入关系型数据库模块: ```typescript -import data_rdb from '@ohos.data.rdb'; +import dataRdb from '@ohos.data.relationalStore'; ``` 关系型数据库提供以下两个基本功能: -![](figures/zh-cn_image_0000001459867377.png) +![](figures/1.png) #### 获取RdbStore 首先要获取一个RdbStore来操作关系型数据库,代码如下: ```typescript -getRdbStore(callback) { - // 如果已经获取到RdbStore则不做操作 - if (this.rdbStore != null) { - Logger.info('Rdb', 'The rdbStore exists.'); - callback(); - return; - } - - // 应用上下文,本Codelab使用API9 Stage模型的Context - let context: Context = getContext(this) as Context; - data_rdb.getRdbStore(context, STORE_CONFIG, 1, (err, rdb) => { - if (err) { - Logger.error('Rdb', 'gerRdbStore() failed, err: ' + err); - return; - } - this.rdbStore = rdb; - - // 获取到RdbStore后,需使用executeSql接口初始化数据库表结构和相关数据 - this.rdbStore.executeSql(this.sqlCreateTable); - Logger.info('Rdb', 'getRdbStore() finished.'); - callback(); - }); +// RdbHelperImp.ets +getRdb(context: any): Promise { + Logger.info(`initRdb getRdb success`); + this.storeConfig = { + // 配置数据库文件名、安全级别 + name: this.mDatabaseName, securityLevel: dataRdb.SecurityLevel.S1 + }; + return new Promise((success, error) => { + dataRdb.getRdbStore(context, this.storeConfig).then(dbStore => { + this.rdbStore = dbStore; // 获取RdbStore + success(this); + }).catch(err => { + Logger.error(`initRdb err : ${JSON.stringify(err)}`); + error(err); + }) + }) } ``` @@ -1206,74 +1198,72 @@ getRdbStore(callback) { 关系型数据库接口提供的增、删、改、查操作均有callback和Promise两种异步回调方式,本Codelab使用了callback异步回调,其中插入数据使用了insert\(\)接口,实现代码如下: ```typescript -insertData(data, callback) { - let resFlag: boolean = false; // 用于记录插入是否成功的flag - const valueBucket = data; // 存储键值对的类型,表示要插入到表中的数据行 - this.rdbStore.insert(this.tableName, valueBucket, function (err, ret) { - if (err) { - Logger.error('Rdb', 'insertData() failed, err: ' + err); - callback(resFlag); - return; +// RdbHelperImp.ets +insert(tableName: string, values: dataRdb.ValuesBucket | Array): Promise { + return new Promise((success, error) => { + Logger.info(`insert tableName : ${tableName}, values : ${JSON.stringify(values)}`); + ... + if (Array.isArray(values)) { + // 如果插入一组数据,则批量插入 + Logger.info(`insert values isArray = ${values.length}`); + this.rdbStore.beginTransaction(); + this.saveArray(tableName, values).then(data => { + Logger.info(`insert success, data : ${JSON.stringify(data)}`); + success(data); + this.rdbStore.commit(); + }).catch(err => { + Logger.error(`insert failed, err : ${err}`); + error(err); + this.rdbStore.commit(); + }) + } else { + this.rdbStore.insert(tableName, values).then(data => { + // 调用insert()接口插入数据 + Logger.info(`insert success id : ${data}`); + success(data); + this.rdbStore.commit(); + }).catch(err => { + Logger.error(`insert failed, err : ${err}`); + error(err); + this.rdbStore.commit(); + }) } - callback(!resFlag); - }); + }) } ``` 删除数据使用了delete\(\)接口,实现代码如下: ```typescript -deleteData(predicates, callback) { - let resFlag: boolean = false; - - // predicates表示待删除数据的操作条件 - this.rdbStore.delete(predicates, function (err, ret) { - if (err) { - Logger.error('Rdb', 'deleteData() failed, err: ' + err); - callback(resFlag); - return; - } - callback(!resFlag); - }); +// RdbHelperImp.ets +delete(rdbPredicates: dataRdb.RdbPredicates): Promise { + Logger.info(`delete rdbPredicates : ${JSON.stringify(rdbPredicates)}`); + return this.rdbStore.delete(rdbPredicates); } ``` 更新数据使用了update\(\)接口,实现代码如下: ```typescript -updateData(predicates, data, callback) { - let resFlag: boolean = false; - const valueBucket = data; - this.rdbStore.update(valueBucket, predicates, function (err, ret) { - if (err) { - Logger.error('Rdb', 'updateData() failed, err: ' + err); - callback(resFlag); - return; - } - callback(!resFlag); - }); +// RdbHelperImp.ets +update(values: dataRdb.ValuesBucket, rdbPredicates: dataRdb.RdbPredicates): Promise { + return this.rdbStore.update(values, rdbPredicates); } ``` 查找数据使用了query\(\)接口,实现代码如下: ```typescript -query(predicates, callback){ - // columns表示要查询的列,如果为空则表示查询所有列 - this.rdbStore.query(predicates, this.columns, function (err, resultSet) { - if (err) { - Logger.error('Rdb', 'query() failed, err: ' + err); - return; - } - callback(resultSet); // 如果查找成功则返回resultSet结果集 - resultSet.close(); // 操作完成后关闭结果集 - }); +// RdbHelperImp.ets +query(rdbPredicates: dataRdb.RdbPredicates, columns?: Array): Promise { + Logger.info(`query rdbPredicates : ${JSON.stringify(rdbPredicates)}`); + return this.rdbStore.query(rdbPredicates, columns); } ``` -### 数据库表结构 +### 数据表定义 根据健康生活APP的使用场景和业务逻辑,定义了三个数据对象,并使用三张数据表来存储,分别是健康任务信息表、每日信息表和全局信息表。 @@ -1281,23 +1271,23 @@ query(predicates, callback){ 目前健康生活应用提供了6个基本的健康任务,分别是早起、喝水、吃苹果、每日微笑、睡前刷牙和早睡。用户可以选择开启或关闭某个任务,开启的任务可以选择是否开启提醒,在指定的时间段内提醒用户进行打卡。任务也可以选择开启的频率,如只在周一到周五开启等。需要记录每项任务的目标值和实际完成值,在用户打卡后判断任务是否已经完成,并记录在数据库中。因此,需要创建一张存储每天的健康任务信息的表,表头如下: -![](figures/zh-cn_image_0000001409507612.png) +![](figures/2.png) #### 每日信息表 在主页面,用户可以查看当天健康任务的完成进度,需要创建一张表记录当天开启的任务个数和已经完成的任务个数,表头如下: -![](figures/zh-cn_image_0000001409347632.png) +![](figures/3.png) #### 全局信息表 用户连续多日打卡完成所有创建的任务可以获得相应的成就,因此,需要有一张表记录连续打卡天数和已达成的成就项。另外,考虑应用多日未打开的情况,需要记录应用第一次打开的日期和最后一次打开的日期以向数据库回填数据,表头如下: -![](figures/zh-cn_image_0000001409187812.png) +![](figures/4.png) ### 创建数据表 -根据6.2中设计的表结构,创建对应的数据表,实现对相应数据的读写操作。 +根据上文设计的表结构,创建对应的数据表,实现对相应数据的读写操作。 #### 健康任务信息数据表 @@ -1322,10 +1312,13 @@ CREATE TABLE IF NOT EXISTS taskInfo( 健康任务信息数据表需要提供插入数据的接口,以在用户当天第一次打开应用时创建当天的健康任务信息,实现代码如下: ```typescript +// TaskInfoApi.ets insertData(taskInfo: TaskInfo, callback) { // 根据输入数据创建待插入的数据行 const valueBucket = generateBucket(taskInfo); - this.taskInfoTable.insertData(valueBucket, callback); + RdbUtils.insert('taskInfo', valueBucket).then(result => { + callback(result); + }); Logger.info('TaskInfoTable', `Insert taskInfo {${taskInfo.date}:${taskInfo.taskID}} finished.`); } ``` @@ -1333,6 +1326,7 @@ insertData(taskInfo: TaskInfo, callback) { 其中generateBucket\(\)代码如下: ```typescript +// TaskInfoApi.ets function generateBucket(taskInfo: TaskInfo) { let obj = {}; TASK_INFO.columns.forEach((item) => { @@ -1341,26 +1335,38 @@ function generateBucket(taskInfo: TaskInfo) { return obj; } -// Const.ts +// CommonConstants.ets export const TASK_INFO = { tableName: 'taskInfo', - sqlCreate: 'CREATE TABLE IF NOT EXISTS taskInfo(id INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT NOT NULL, taskID INTEGER, targetValue ' + - 'TEXT NOT NULL, isAlarm BOOLEAN, startTime TEXT NOT NULL, endTime TEXT NOT NULL, frequency TEXT NOT NULL, isDone BOOLEAN, finValue ' + - 'TEXT NOT NULL, isOpen BOOLEAN)', - columns: ['id', 'date', 'taskID', 'targetValue', 'isAlarm', 'startTime', 'endTime', 'frequency', 'isDone', 'finValue', 'isOpen'] + columns: [ + 'id', + 'date', + 'taskID', + 'targetValue', + 'isAlarm', + 'startTime', + 'endTime', + 'frequency', + 'isDone', + 'finValue', + 'isOpen' + ] } ``` 用户开启和关闭任务,改变任务的目标值、提醒时间、频率等,用户打卡后修改任务的实际完成值都是通过更新数据接口来实现的,代码如下: ```typescript +// TaskInfoApi.ets updateDataByDate(taskInfo: TaskInfo, callback) { const valueBucket = generateBucket(taskInfo); - let predicates = new data_rdb.RdbPredicates(TASK_INFO.tableName); + let predicates = new dataRdb.RdbPredicates(TASK_INFO.tableName); // 根据date和taskID匹配要更新的数据行 predicates.equalTo('date', taskInfo.date).and().equalTo('taskID', taskInfo.taskID); - this.taskInfoTable.updateData(predicates, valueBucket, callback); + RdbUtils.update(valueBucket, predicates).then(result => { + callback(result); + }); Logger.info('TaskInfoTable', `Update data {${taskInfo.date}:${taskInfo.taskID}} finished.`); } ``` @@ -1368,8 +1374,9 @@ updateDataByDate(taskInfo: TaskInfo, callback) { 用户可以查看当天和以前某日的健康任务信息,需要提供查找数据接口,实现代码如下: ```typescript +// TaskInfoApi.ets query(date: string, isOpen: boolean = true, callback) { - let predicates = new data_rdb.RdbPredicates(TASK_INFO.tableName); + let predicates = new dataRdb.RdbPredicates(TASK_INFO.tableName); predicates.equalTo('date', date); // 如果isOpen为true,则只查找开启的任务 @@ -1377,18 +1384,18 @@ query(date: string, isOpen: boolean = true, callback) { predicates.equalTo('isOpen', true); } predicates.orderByAsc('taskID'); // 查找结果按taskID排序 - this.taskInfoTable.query(predicates, function(resultSet) { + RdbUtils.query(predicates, function(resultSet) { let count = resultSet.rowCount; - + // 查找结果为空则返回空数组,否则返回查找结果数组 if (count === 0 || typeof count === 'string') { - Logger.info('TaskInfoTable',`${date} query no results!`); + Logger.info('TaskInfoTable', `${date} query no results!`); callback([]); } else { resultSet.goToFirstRow(); const result = []; for (let i = 0; i < count; i++) { - let tmp = new TaskInfo(0,'', 0, '', false, '', '', '', false, ''); + let tmp = new TaskInfo(0, '', 0, '', false, '', '', '', false, ''); tmp.id = resultSet.getDouble(resultSet.getColumnIndex('id')); ... // 省略赋值代码 result[i] = tmp; @@ -1418,10 +1425,11 @@ CREATE TABLE IF NOT EXISTS dayInfo( 页面需要查找对应日期的目标任务个数和完成任务个数用以在页面显示任务进度,因此需要查找数据的接口。且页面在打开时需要显示当周每天任务的完成情况,因此需要允许一次调用查找一周的每日任务信息。实现代码如下: ```typescript +// DayInfoApi.ets queryList(dates: string[], callback) { - let predicates = new data_rdb.RdbPredicates(DAY_INFO.tableName); + let predicates = new dataRdb.RdbPredicates(DAY_INFO.tableName); predicates.in('date', dates); // 匹配日期数组内的所有日期 - this.dayInfoTable.query(predicates, function(resultSet) { + RdbUtils.query(predicates, function(resultSet) { let count = resultSet.rowCount; if (count === 0) { Logger.info('DayInfoTable','query no results.'); @@ -1463,57 +1471,58 @@ CREATE TABLE IF NOT EXISTS globalInfo( 应用首次打开时,数据库中没有数据,要做数据库的初始化,写入一组空数据。另外,如果用户连续几天没有打开APP,再次打开时需要将数据回写至数据库。因此需要实现一个数据库接口,在应用打开时调用,进行上述操作。代码如下: ```typescript +// DatabaseModel.ets query(date: string, callback) { let result = []; let self = this; - this.globalInfoTable.query(function(globalResult) { - if (globalResult.length === 0) { // 如果查不到全局信息,就写入全局信息 + GlobalInfoApi.query(function(globalResult) { + // 如果查不到全局信息,就写入全局信息 + if (globalResult.length === 0) { ... // 插入健康任务信息、每日信息和全局信息 callback(result, dayInfo); - } else { // 如果查到全局信息,那么查询当日任务信息 + } else { + // 如果查到全局信息,那么查询当日任务信息 let newGlobalInfo = globalResult; let preDate = globalResult.lastDate; newGlobalInfo.lastDate = date; ... // 更新全局信息 // 查询当日任务信息 - self.taskInfoTable.query(date, false, (taskResult) => { + TaskInfoApi.query(date, false, (taskResult) => { + let dayInfo = new DayInfo(date, 0, 0); // 如果查不到当日任务信息,就查询全局任务信息 if (taskResult.length === 0) { ... - self.taskInfoTable.query(GLOBAL_KEY, false, (globalTaskResult) => { - ... // 回写没打开应用的时间段的健康任务信息和每日信息 + TaskInfoApi.query(GLOBAL_KEY, false, (globalTaskResult) => { + ... // 回写没打开应用的时间段的健康任务信息和每日信息 }) } else { - let taskNum = 0; - let finNum = 0; - ... // 计算当日健康任务的开启个数和完成数 - dayInfo.targetTaskNum = taskNum; - dayInfo.finTaskNum = finNum; + // 计算当日健康任务的开启个数和完成数 + let dayInfoList = self.calFinishNum(taskResult, result); + dayInfo.targetTaskNum = dayInfoList[0]; + dayInfo.finTaskNum = dayInfoList[1]; + callback(result, dayInfo); } - callback(result, dayInfo); }); } }); } ``` -## 编写通用工具类 +## 通用工具类 本节将介绍日志打印、时间换算等通用工具类的编写和使用,工具类可以简化应用代码编写和业务流程处理。 ### 日志类 -日志类Logger旨在提供一个全局的日志打印、日志管理的地方,既可以规范整个应用的日志打印,也方便日后对日志工具类进行修改,而不需要去改动代码中每一个调用日志的地方,如切换具体的日志实现类(比如不使用Console而是HiLog),将日志记录到本地文件等。 - -Logger对外的日志API全部使用静态方法,方便调用者使用,目前分verbose,debug,info,warn,error五个级别。 +日志类Logger旨在提供一个全局的日志打印、日志管理的地方,既可以规范整个应用的日志打印,也方便日后对日志工具类进行修改,而不需要去改动代码中每一个调用日志的地方,目前分info,debug,warn,error四个级别。 使用方法如下: 1. import Logger日志类: ```typescript - import { Logger } from '../utils/log/Logger'; + import Logger from '../../utils/Logger'; ``` 2. 调用对应级别的静态方法: @@ -1522,44 +1531,24 @@ Logger对外的日志API全部使用静态方法,方便调用者使用,目 Logger.debug('MyAbilityStage', 'onCreate'); ``` - Logger内部采用单例模式,全局所有日志共享一个实例: - - ```typescript - private static logger: ILogger; - private constructor() {} - public static getInstance(): Logger { - if (!Logger.logger) { - ... - } - return Logger.logger; - } - ``` - Logger目前在打印日志时会拼装本应用的唯一标识,方便筛选日志和调试: ```typescript - // Logger.ets - private static appIdentifier: string = 'EHAPP'; - - // ConsoleLogger.ets - public debug(tag: string, msg: string): void { - console.debug(`[${ Logger.appIdentifier }] [debug] tag:${ tag } msg:${ msg }`); - } - ``` - - Logger在打印日志前会判断当前是debug版本还是release版本,在release版本中关闭日志,防止应用上线后日志泄露,影响应用安全: + // Logger.ets + class Logger { + private domain: number; + private prefix: string; + + constructor(prefix: string = '', domain: number = 0xFF00) { + this.prefix = prefix; + this.domain = domain; + } + ... + } - ```typescript - private static isAppDebugMode: boolean = true; - - public static debug(tag: string, msg: string): void { - if (Logger.isAppDebugMode) { - Logger.getInstance().debug(tag, msg); - } - } + export default new Logger(LOGGER_PREFIX, 0xFF02); ``` - ### 时间工具 为全局提供时间工具,避免重复定义。 @@ -1609,9 +1598,11 @@ export function ratio2percent(ratio: number): string { 2. 引用工具方法 \( 例如成就页面,每个徽章占据屏幕宽度的三分之一 \) : ```typescript - Column({space: commonConst.DEFAULT_18}) { + // 引用工具方法( 例如成就页面,每个徽章占据屏幕宽度的三分之一 ) : + Column({ space: commonConst.DEFAULT_18 }) { ... // 省略徽章卡片的 UI 布局细节 - }.width(ratio2percent(achieveConst.ACHIEVE_SPLIT_RATIO)) // achieveConst.ACHIEVE_SPLIT_RATIO = 1 / 3 + } + .width(ratio2percent(achieveConst.ACHIEVE_SPLIT_RATIO)) ``` ### 事件分发类 @@ -1661,14 +1652,14 @@ aboutToDisappear() { // BroadCast.ets public off(event, callback) { ... // 省略入参检查 - let len = cbs.length; - for (let i = 0; i < len; i++) { - cb = cbs[i]; - if (cb === callback || cb.fn === callback) { - cbs.splice(i, 1); - break; - } + const cbs = this.callBackArray[event]; + if (!cbs) { + return; + } + if (!callback) { + this.callBackArray[event] = null; } + cbs.splice(cbs.indexOf(callback), 1); } ``` @@ -1691,12 +1682,15 @@ taskItemAction(item: TaskInfo, isClick: boolean) { // BroadCast.ets public emit(event, args?: any[]) { ... // 省略入参检查 - let len = cbs.length; - for (let i = 0; i < len; i++) { - try { - cbs[i].apply(_self, args); - } catch (e) { - new Error(e); + let cbs = [...this.callBackArray[event]]; + if (cbs) { + let len = cbs.length; + for (let i = 0; i < len; i++) { + try { + cbs[i].apply(_self, args); + } catch (error) { + new Error(error); + } } } } @@ -1704,7 +1698,19 @@ public emit(event, args?: any[]) { ## 总结 -通过本次Codelab的学习,您应该已经掌握了页面跳转、自定义弹窗等UI方法,并学会了操作关系型数据库读写数据。 +您已经完成了本次Codelab的学习,并了解到以下知识点: + +1. ArkUI基础组件、容器组件的使用。 + +2. 使用页面路由跳转到指定页面并传递所需参数。 + +3. 基于基础组件封装自定义组件,如日历、弹窗等。 + +4. 数据驱动UI组件刷新。 + +5. 使用首选项接口实现应用权限管理。 + +6. 使用关系型数据库读写关系型数据。 ![](figures/彩带动效.gif) diff --git a/ExcellentCase/Healthy_life/figures/1.png b/ExcellentCase/Healthy_life/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ee8240bed773b6a801d76835fa38b6a8d365c7de GIT binary patch literal 19678 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 literal 0 HcmV?d00001 -- Gitee