当前位置:   article > 正文

HarmonyOS实战开发-如何使用首选项能力实现一个简单示例。

HarmonyOS实战开发-如何使用首选项能力实现一个简单示例。

介绍

本篇Codelab是基于HarmonyOS的首选项能力实现的一个简单示例。实现如下功能:

  1. 创建首选项数据文件。
  2. 将用户输入的水果名称和数量,写入到首选项数据库。
  3. 读取首选项数据库中的数据。
  4. 删除首选项数据文件。

最终效果图如下:

相关概念

  • 首选项:为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。
  • TextInput:可以输入单行文本并支持响应输入事件的组件。
  • Button:按钮组件,可快速创建不同样式的按钮。

环境搭建

软件要求

  • DevEco Studio版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:润和RK3568开发板。
  • OpenHarmony系统:3.2 Release。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. 获取OpenHarmony系统版本:标准系统解决方案(二进制)。以3.2 Release版本为例:

2.搭建烧录环境。

  • 完成DevEco Device Tool的安装
  • 完成RK3568开发板的烧录

3.搭建开发环境

  • 开始前请参考工具准备,完成DevEco Studio的安装和开发环境配置。
  • 开发环境配置完成后,请参考使用工程向导创建工程(模板选择“Empty Ability”)。
  • 工程创建完成后,选择使用真机进行调测。

代码结构解读

本篇Codelab只对核心代码进行讲解。

  1. ├──entry/src/main/ets // 代码区
  2. │ ├──common
  3. │ │ ├──constants
  4. │ │ │ ├──CommonConstants.ets // 公共常量类
  5. │ │ │ └──StyleConstants.ets // 样式常量类
  6. │ │ └──utils
  7. │ │ └──Logger.ets // 日志打印类
  8. │ ├──entryability
  9. │ │ └──EntryAbility.ts // 程序入口类
  10. │ ├──model
  11. │ │ └──PreferenceModel.ets // 首选项相关方法类
  12. │ ├──pages
  13. │ │ └──Index.ets // 主界面
  14. │ ├──view
  15. │ │ ├──ButtonComponent.ets // 自定义Button组件类
  16. │ │ └──TextItemComponent.ets // 自定义Text组件类
  17. │ └──viewmodel
  18. │ ├──ButtonItemData.ets // 按钮数据类
  19. │ └──Fruit.ets // 水果数据类
  20. └──entry/src/main/resources // 资源文件目录

构建主界面

在这个任务中,我们将完成示例主界面的开发,效果图如下:

从上面效果图可以看出,主界面主要由2个相同样式的文本和文本输入框,以及3个相同样式的按钮组成。我们可以将文本和文本输入框抽取成一个TextItemComponent子组件。再将按钮抽取成一个ButtonComponent子组件。

  1. 在ets目录下,点击鼠标右键 > New > Directory,新建名为view的自定义子组件目录。然后在view目录下,点击鼠标右键 > New > ArkTS File,新建两个ArkTS文件,分别为TextItemComponent子组件、ButtonComponent子组件。可以看到文件目录结构如下:

2.文本和文本输入框抽取成的TextItemComponent子组件,效果图如下:

具体代码如下:

  1. // TextItemComponent.ets
  2. @Component
  3. export default struct TextItemComponent {
  4. private textResource: Resource = $r('app.string.empty'); // 按钮文本资源
  5. private placeholderResource: Resource = $r('app.string.empty'); // placeholder文本资源
  6. private marginBottom: string = '';
  7. private marginTop: string = '';
  8. private textInputType: InputType = InputType.Normal; // 输入框输入数据类型
  9. private textFlag: number = 0; // 文本框标记
  10. @Link fruit: Fruit; // 水果数据
  11. private textInputCallBack = (value: string) => {}; // TextInput的回调
  12. build() {
  13. Column() {
  14. Text(this.textResource)
  15. .fontSize(StyleConstants.TEXT_FONT_SIZE)
  16. .height(StyleConstants.TEXT_HEIGHT)
  17. .width(StyleConstants.FULL_PERCENT)
  18. .fontColor($r('app.color.text_font_color'))
  19. .letterSpacing(StyleConstants.LETTER_SPACING)
  20. .fontWeight(StyleConstants.FONT_WEIGHT)
  21. .margin({
  22. bottom: StyleConstants.TEXT_MARGIN_BOTTOM,
  23. left: StyleConstants.TEXT_MARGIN_LEFT,
  24. top: this.marginTop
  25. })
  26. TextInput({
  27. placeholder: this.placeholderResource,
  28. text: this.textFlag === 0 ? (this.fruit.fruitName) : (this.fruit.fruitNum)
  29. })
  30. .placeholderFont({ size: StyleConstants.FONT_SIZE, weight: StyleConstants.FONT_WEIGHT })
  31. .placeholderColor($r('app.color.placeholder_color'))
  32. .caretColor(Color.Blue)
  33. .type(this.textInputType)
  34. .height(StyleConstants.TEXT_INPUT_HEIGHT)
  35. .width(StyleConstants.TEXT_INPUT_WIDTH)
  36. .margin({ bottom: this.marginBottom })
  37. .fontSize(StyleConstants.FONT_SIZE)
  38. .fontColor($r('app.color.text_font_color'))
  39. .fontWeight(StyleConstants.FONT_WEIGHT)
  40. .backgroundColor($r('app.color.white'))
  41. .onChange((value: string) => {
  42. this.textInputCallBack(value);
  43. })
  44. }
  45. }
  46. }

3.抽取的ButtonComponent子组件,效果图如下:

具体代码如下:

  1. // ButtonComponent.ets
  2. @Component
  3. export default struct ButtonComponent {
  4. private buttonItemValues: Array<ButtonItemData> = this.getButtonItemValues();
  5. @Link fruit: Fruit; // 水果数据
  6. build() {
  7. Column() {
  8. ForEach(this.buttonItemValues, (item: ButtonItemData) => {
  9. Button(item.resource, { type: ButtonType.Capsule, stateEffect: true })
  10. .backgroundColor($r('app.color.button_background_color'))
  11. .width(StyleConstants.BUTTON_WIDTH)
  12. .height(StyleConstants.BUTTON_HEIGHT)
  13. .fontWeight(StyleConstants.FONT_WEIGHT)
  14. .fontSize(StyleConstants.FONT_SIZE)
  15. .margin({ bottom: StyleConstants.BUTTON_MARGIN_BOTTOM })
  16. .onClick(() => {
  17. item.clickMethod();
  18. })
  19. }, (item: ButtonItemData) => JSON.stringify(item))
  20. }
  21. }
  22. }

4.在Index.ets主界面中引用TextItemComponent和ButtonComponent子组件,具体代码如下:

  1. // Index.ets
  2. Column() {
  3. // 水果名称输入框
  4. TextItemComponent({
  5. textResource: $r('app.string.fruit_text'),
  6. placeholderResource: $r('app.string.fruit_placeholder'),
  7. textFlag: CommonConstants.FRUIT_FLAG,
  8. fruit: $fruit,
  9. textInputCallBack: (value: string) => {
  10. this.fruit.fruitName = value;
  11. }
  12. })
  13. // 水果数量输入框
  14. TextItemComponent({
  15. textResource: $r('app.string.number_text'),
  16. placeholderResource: $r('app.string.number_placeholder'),
  17. textFlag: CommonConstants.NUMBER_FLAG,
  18. fruit: $fruit,
  19. textInputCallBack: (value: string) => {
  20. this.fruit.fruitNum = value;
  21. }
  22. })
  23. // 按钮组件
  24. ButtonComponent({ fruit: $fruit })
  25. }
  26. .width(StyleConstants.FULL_PERCENT)
  27. .height(StyleConstants.FULL_PERCENT)
  28. .backgroundColor($r('app.color.main_background_color'))

创建数据文件

创建数据文件需要如下两个步骤:

  • 导入dataPreferences模块。
  • 通过dataPreferences模块的getPreferences(context, name)方法获取到对应文件名的Preferences实例。

Preferences的数据存储在文件中,因此需要指定存储的文件名PREFERENCES_NAME。再通过Preferences提供的方法进行数据库的相关操作。具体代码如下:

  1. // PreferenceModel.ets
  2. // 导入dataPreferences模块
  3. import dataPreferences from '@ohos.data.preferences';
  4. let context = getContext(this);
  5. let preference: dataPreferences.Preferences;
  6. let preferenceTemp: dataPreferences.Preferences;
  7. // 调用getPreferences方法读取指定首选项持久化文件,将数据加载到Preferences实例,用于数据操作
  8. async getPreferencesFromStorage() {
  9. try {
  10. preference = await dataPreferences.getPreferences(context, CommonConstants.PREFERENCES_NAME);
  11. } catch (err) {
  12. Logger.error(CommonConstants.TAG, `Failed to get preferences, Cause: ${err}`);
  13. }
  14. }

写入数据

获取Preferences实例后,使用Preferences的put方法,将用户输入的水果名称和水果数量数据,保存到缓存的实例中。再通过Preferences的flush方法将Preferences实例异步存储到首选项持久化文件中。具体代码如下:

  1. // PreferenceModel.ets
  2. async putPreference(fruit: Fruit) {
  3. ...
  4. try {
  5. // 将用户输入的水果名称和水果数量数据,保存到缓存的Preference实例中
  6. await preference.put(CommonConstants.KEY_NAME, JSON.stringify(fruit));
  7. } catch (err) {
  8. Logger.error(CommonConstants.TAG, `Failed to put value, Cause: ${err}`);
  9. }
  10. // 将Preference实例存储到首选项持久化文件中
  11. await preference.flush();
  12. }

读取数据

使用Preferences的get方法读取数据。如果键不存在,则返回默认值。例如获取下面代码中fruit的值,如果fruit的键KEY_NAME不存在,则会返回空字符串。通过默认值的设置,来避免程序出现异常。具体代码如下:

  1. // PreferenceModel.ets
  2. async getPreference() {
  3. let fruit = '';
  4. ...
  5. try {
  6. fruit = (await preference.get(CommonConstants.KEY_NAME, '')).toString();
  7. } catch (err) {
  8. Logger.error(CommonConstants.TAG, `Failed to get value, Cause: ${err}`);
  9. }
  10. ...
  11. }

删除数据文件

通过dataPreferences模块的deletePreferences(context, name)方法从内存中移除指定文件对应的Preferences单实例。移除Preferences单实例时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。具体代码如下:

  1. // PreferenceModel.ets
  2. async deletePreferences() {
  3. try {
  4. await dataPreferences.deletePreferences(context, CommonConstants.PREFERENCES_NAME);
  5. } catch(err) {
  6. Logger.error(CommonConstants.TAG, `Failed to delete preferences, Cause: ${err}`);
  7. };
  8. ...
  9. }

总结

您已经完成了本次Codelab的学习,并了解到以下知识点:

  1. 如何使用TextInput输入框。
  2. 如何使用首选项数据库。

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→HarmonyOS教学视频

HarmonyOS教学视频

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书方式请点击→《鸿蒙生态应用开发白皮书V2.0PDF

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. .……

在这里插入图片描述


二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

在这里插入图片描述

三、如何快速入门?鸿蒙基础入门学习指南

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. .……

在这里插入图片描述


四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. .……

在这里插入图片描述


五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 7.网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. .……

在这里插入图片描述


更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/337687
推荐阅读
相关标签
  

闽ICP备14008679号