OpenHarmony标准设备应用开发(三)——分布式数据管理

OpenHarmony开发者 2022-04-07 19:11:01

(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)

 

邢碌
 

上一章,我们通过分布式音乐播放器、分布式炸弹、分布式购物车,带大家讲解了 OpenAtom OpenHarmony(以下简称“OpenHarmony”)中,相关控件在布局中如何使用,以及在 OpenHarmony 中如何实现音乐播放,显示动画,转场动画(页面间转场)等功能。

 

本章是 OpenHarmony 标准设备应用开发的第三篇文章,将会在前面两章的基础上给大家讲解分布式数据管理在多台设备间,当数据出现变动时,通过订阅的方式,实现多台设备间的数据同步更新。为了更好的理解,我们使用 eTS 开发了一款如下动图所示的井字过三关游戏来讲解分布式数据管理在应用中的使用。

 

Demo 简介:Demo 基于 OpenHarmony 系统使用 eTS 语言进行编写,本 Demo 主要通过设备认证,分布式拉起,分布式数据管理等功能来实现。

 

项目创建以及页面布局等,这里就不再赘述,本章重点讲解自定义弹窗以及分布式数据管理。

 

一、自定义弹窗


通过对自定义弹窗的讲解,希望能让大家学到如何在项目中实现自己的自定义弹窗。

 

1.1 通过 @CustomDialog 装饰器来创建自定义弹窗,使用方式可参考 自定义弹窗:

 

官方参考链接:zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md · OpenHarmony/docs - Gitee.com


1.2 布局从上到下由 Text、List、Button 组成,List 中的子元素由 Text 和 Radio 组成,以下代码的省略号表示非 UI 相关的逻辑代码,具体实现参考源代码:

 

@CustomDialog
struct gameStart {
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        //顶部标题
        Text('发现以下在线设备').fontColor(Color.Black).fontSize(30)
      }.width('100%').height('20%')

      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) {
       //使用List容器动态加载在线设备
       List() {
          ForEach(this.deviceName, (item) => {
            ListItem() {
              Row() {
                //Text组件显示设备名
                Text(item.deviceName).width('80%').fontSize(30).fontColor(Color.Black)
                //Radio组件显示单选框
                Radio({ value: '' }).checked(this.check[item.id]).onChange(() => {
                  //这里保证List里面点击了多个Radio组件时,只有当前点击的为选中状态
                  for (let i = 0; i < this.check.length; i++) {
                    this.check[i] = false
                  }
                  this.check[item.id] = true
                })
              }
            }
          }, item => item.id)
        }
        .height('80%')

        Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
          Button('确定').width(200).height(50).fontSize(30).onClick(() => {
            //......
            this.controller.close()
          })
        }.height('30%')

      }.width('100%').height('80%')
    }.height('100%').width('100%')
  }
}


通过上述方式,完成我们的自定义弹窗,大家也可以在自己的项目中尝试完成自己的自定义弹窗。

 

二、分布式数据管理


分布式数据管理,可以在多台设备间,当数据出现变动时,通过订阅的方式,实现多台设备间的数据同步更新。当我们需要在多台设备间实现数据的同步更新,就可以使用分布式数据管理来实现。井字过三关游戏,通过分布式数据管理,实现多台设备间游戏界面的同步更新,实现多台设备同玩一个游戏的功能。

 

官网参考链接:zh-cn/application-dev/reference/apis/js-apis-distributed-data.md · OpenHarmony/docs - Gitee.com


数据分布式运作示意图,如下所示。

 

实现步骤:

 

分布式数据管理依赖 @ohos.data.distributedData 模块实现,详细参考项目源码中的 RemoteDataManager.ets 实现步骤。

 

2.1 导入该模块

 

import factory from '@ohos.data.distributedData';

 

2.2 创建 KVManager 实例,用于管理数据库对象

 

registerDataListCallback(callback) {
    let that = this
    if (this.kvManager == null) {
      try {
        const config = {
          userInfo: {
            userId: '0',
            userType: 0
          },
          bundleName: 'com.example.tictactoegame'
        }
        factory.createKVManager(config).then((manager) => {
          that.kvManager = manager
          that.registerDataListCallback_(callback)
        }).catch((err) => {
        })
      } catch (e) {
      }
    } else {
      this.registerDataListCallback_(callback)
    }
  }


备注:bundleName 改成对应内容

 

2.3 创建并获取 KVStore 数据库

 

registerDataListCallback_(callback) {
    let that = this
    if (that.kvManager == null) {
      callback()
      return
    }
    if (that.kvStore == null) {
      try {
        let options =
          {
            createIfMissing: true,
            encrypt: false,
            backup: false,
            autoSync: true,
            kvStoreType: 1,
            securityLevel: 3
          }
        this.kvManager.getKVStore(this.STORE_ID, options).then((store) => {
          that.kvStore = store
          that._registerDataListCallback_(callback)
        }).catch((err) => {
        })
      } catch (e) {
      }
    } else {
      this._registerDataListCallback_(callback)
    }
  }


备注:STORE_ID 改成对应内容

 

2.4 订阅指定类型的数据变更通知

 

_registerDataListCallback_(callback) {
    let that = this
    if (that.kvManager == null) {
      callback()
      return
    }
    this.kvStore.on('dataChange', 1, function(data) {
      if (data) {
         that.arr = data.updateEntries
        callback()
      }
    })
  }


备注:kvStore.on 方法中的 1 对应订阅的类型,具体详情看上面官网参考中的详细描述。

 

2.5 添加指定类型键值对到数据库

 

dataChange(key, value) {
    let that = this
      try {
        that.kvStore.put(JSON.stringify(key), JSON.stringify(value)).then((data) => {
        }).catch((err) => {
          prompt.showToast({message:'put err:'+JSON.stringify(value)})
        })

      } catch (e) {
      }
  }


项目下载链接:OpenHarmony-SIG/knowledge_demo_temp - Gitee.com


相关问题说明:

分布式数据管理数据传输过程中,如果数据中包含中文,会出现乱码,所以数据存储中,尽量不要使用中文。

 

通过此次三个章节的讲解,我们知道了如何从零到有在标准设备上运行一个最简单的 OpenHarmony 程序,并在此基础上,知道了如何在 OpenHarmony 中做到音乐播放,显示动画,转场动画等相关进阶技能,以及如何通过分布式数据管理在多台设备之间实现数据的同步更新。

 

在后续 OpenHarmony 最新版本中,我们会有更多新的特性,更多的开发板,以及更多的样例带给大家,敬请期待。

 

...全文
1670 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
HDC 2024华为开发者大会(脱敏)PPT汇总,共123份。 【HarmonyOS学生公开课】鸿蒙生态开发者解决方案关键特性-part3.pdf 【创新突破】HarmonyOS NEXT创新突破 打造生态差异化竞争力.pdf 【创新突破】HarmonyOS赋能,移动云盘笔记的体验变革.pdf 【创新突破】HarmonyOS高性能规则检测创新实践.pdf 【创新突破】一触即扫,精准还原:扫描全能王鸿蒙生态创新实践.pdf 【创新突破】懂车帝大模型智能Agent对接小艺智能体.pdf 【创新突破】无缝出行,美团骑行体验快人一步.pdf 【创新突破】身临其境,带你玩转折叠屏沉浸观影——咪咕视频沉浸观影.pdf 【创新突破】身临其境,带你玩转折叠屏沉浸观影——折叠屏优秀体验.pdf 【创新突破】软硬结合,智慧感知打造HarmonyOS第六感.pdf 【创新突破】高效省电,揭秘高德地图节能黑科技.pdf 【原生互联】HUAWEI ArkData:随口记、随时忆的高性能分布式智慧数据底座.pdf 【原生互联】分布式软总线 秒连接、多并发、高可靠、低功耗新体验.pdf 【原生互联】打造HarmonyOS全场景基因 让数据与内容自由流转起来.pdf 【原生互联】携手HarmonyOS,构建高效协同办公新体验.pdf 【原生互联】案例分享:小红书多端协同内容编创体验创新.pdf 【原生互联】案例分享:讯飞听见APP数据迁移经验分享.pdf 【原生互联】案例分享:起点读书全场景自由流转带来阅读新体验.pdf 【原生互联】端云协同助力快速换机,用户数据资产快速继承.pdf 【原生互联】自由互通:跨设备能力调用,助力应用创新多端体验.pdf 【原生互联】自由分享:剪贴、拖拽、近远场互传,应用间内容高效交换.pdf 【原生互联】自由流转:开发、分发、接续全栈能力,使能应用全场景无缝流转.pdf 【原生安全】HarmonyOS NEX评估保障级EAL5+认证分享.pdf 【原生安全】体系化构筑HarmonyOS NEXT安全底座支撑打造安全的数字基础设施.pdf 【原生安全】基于HarmonyOS NEXT的终端安全全链路防护.pdf 【原生安全】屹通中间件 基于HarmonyOS NEXT助力银行业APP安全.pdf 【原生安全】新HarmonyOS NEXT体系下小红书端安全防护实践.pdf 【原生安全】新架构与新生态下HarmonyOS NEXT安全隐私构筑与创新.pdf 【原生安全】泰尔带你解读HarmonyOS下安全隐私合规应用标准-APP用户权益保护的发展趋势及展望.pdf 【原生安全】石墨文档基于HarmonyOS NEXT DLP能力构建文档分享保护能力-基于HarmonyOS数据保护DLP助力石墨文档安全分享.pdf 【原生安全】鸿蒙生态全生命周期安全与隐私治理框架.pdf 【原生易用】HarmonyOS原生无障碍能力 使能更多“数字包容”创新应用开发.pdf 【原生易用】HarmonyOS原生输入法框架 助力讯飞打造安全、高效的输入体验.pdf 【原生易用】一步即扫,直达应用所有服务.pdf 【原生易用】基于HarmonyOS SDK构建简单易用的鸿蒙原生应用.pdf 【原生易用】微博打造“有声有色”生动笔记编创新体验.pdf 【原生易用】日程管理多源归一,服务场景一键直达.pdf 【原生易用】构建更便捷的华为账号使用体验.pdf 【原生易用】系统级播控框架,音视频“播、控、投”更易用.pdf 【原生易用】美团如何高效实现简单易用的用户体验旅程.pdf 【原生智能】HarmonyOS原生智能:构建未来智慧生态.pdf 【原生智能】HiAI开放端侧自定义计算编程:Ascend C.pdf 【原生智能】实践分享:HiAI助力应用低成本音质更清晰-网易云音乐.pdf 【原生智能】实践分享:做懂你的金融助手-建设银行.pdf 【原生智能】实践分享:小艺有声体验升级-喜马拉雅.pdf 【原生智能】实践分享:尽享智慧旅行服务-去哪儿旅行.pdf 【原生智能】实践分享:应用低成本生而智能-新浪新闻.pdf 【原生智能】小艺搜索 AI赋能,搜索新范式,共赢流量新机遇.pdf 【原生智能】智慧助手体验全新升级 开启生态接入新时代.pdf 【原生流畅】ArkTS协同方舟编译运行时使能鸿蒙应用原生流畅.pdf 【原生流畅】HarmonyOS原生流畅新技术概览.pdf 【原生流畅】HarmonyOS并行化技术助力应用体验更流畅.pdf 【原生流畅】HarmonyOS并行化编程框架 打造美图秀秀极致架构和体验.pdf 【原生流畅】HarmonyOS方舟图形引擎打造流畅、沉浸渲染效果.pdf 【原生流畅】HarmonyOS方舟多媒体引擎打造媒体丝滑视听体验.pdf 【原生流畅】HarmonyOS高性能网络协议栈带来流畅图文资源加载新体验.pdf 【原生流畅】如何开发高性能UI界面.pdf 【原生流畅】晶核性能优化实践.pdf 【原生流畅】智能网络感知 打造极致流畅的HarmonyOS版移动云盘图文体验.pdf 【原生流畅】毕昇编译器软硬芯云协同优化助力鸿蒙应用原生流畅.pdf 【原生流畅】淘宝HarmonyOS版本性能优化之路.pdf 【原生流畅】美团鸿蒙原生应用高效能动态化容器方案实践.pdf 【原生流畅】飞常准UI组件高性能优化实例分享.pdf 【原生流畅】高德地图HarmonyOS版本渲染优化实践.pdf 【原生流畅】高性能ArkWeb原生开发实践.pdf 【原生精致】HarmonyOS一站式多端体验设计-蜻蜓FM一多适配实践.pdf 【原生精致】万物归?,全新HarmonyOS系统架构.pdf 【原生精致】临境视听:打造双Vivid极致影音体验.pdf 【原生精致】天生精致,HarmonyOS一站式多端体验设计-易车.pdf 【原生精致】如何打造HarmonyOS精致应用体验.pdf 【原生精致】小红书鸿蒙原生应用相机实践.pdf 【原生精致】打造无缝协作的原生应用设计数字化体验 - Pixso.pdf 【原生精致】方天视窗 带你感受不?样的?端动效体验 - 华为欧拉部菲尔兹Lab.pdf 【原生精致】触手可得,打造鸿蒙极致触感体验.pdf 【原生精致】让你的相机“焕然一新” -华为终端BG HarmonyOS相机架构专家.pdf 【开发套件】HarmonyOS SDK 助力鸿蒙原生应用高效开发,好用易用.pdf 【开发套件】HarmonyOS赋能套件助力高效开发.pdf 【开发套件】“稳”操胜券 快手调试经验谈.pdf 【开发套件】仓颉语言助力鸿蒙原生应用高效开发.pdf 【开发套件】去哪儿HarmonyOS NEXT落地实践-模拟器带你尝鲜鸿蒙特性.pdf 【开发套件】支付宝 X HarmonyOS大型应用架构设计实践.pdf 【开发套件】新浪微博性能优化之道 打造流畅滑动体验.pdf 【开发套件】造利器固质量,HarmonyOS应用测试最佳实践.pdf 【开发套件】高效跨语言开发 助力WPS接入HarmonyOS NEXT.pdf 【开发套件】鸿蒙原生应用高效开发与实践分享.pdf 【星闪】HarmonyOS+NEXT来了,怎么抓住星闪的闪光点.pdf 【星闪】HarmonyOS星闪北向开放能力预发布.pdf 【星闪】拥抱开发者助力星生态.pdf 【星闪】星闪+ICCE加速无感数字车钥匙应用.pdf 【星闪】星闪在鸿蒙分布式软总线的应用展望.pdf 【星闪】星闪模组,全面引领智慧物联新浪潮.pdf 【星闪】星闪给麦克风带来的全新体验.pdf 【智慧出行】议题1:抓住HarmonyOS新机遇,重塑智慧出行产业.pdf 【智慧出行】议题2:智能座舱语音分级与测评创新进展及生态构建.pdf 【智慧出行】议题3:AI时代的智能座舱音乐体验.pdf 【智慧出行】议题4:喜马拉雅在智能座舱空间音频的探索与应用.pdf 【智慧出行】议题5:融合与创新,引领智能座舱中的视频娱乐新纪元.pdf 【智慧出行】议题6:打造儿童的全场景鸿蒙智行生活体验.pdf 【智慧出行】议题7:HarmonyOS智慧出行应用生态策略.pdf 【智慧出行】议题8:HUAWEI+HiCar+手机座舱生态融合.pdf 【统一生态】ArkUI-X跨平台框架分享.pdf 【统一生态】OpenHarmony在视觉领域的实践分享.pdf 【统一生态】“星闪+OpenHarmony”构建万物智联新引擎.pdf 【统一生态】海思5+2解决方案 助力OpenHarmony生态发展.pdf 【统一生态】统一应用平台实践分享 - 宝宝巴士世界.pdf 【统一生态】统一生态 鸿蒙生态设备统一互联底座和统一应用平台.pdf 【统一生态】设备互联互通行业案例 - 医疗行业场景分享.pdf 【统一生态】设备互联互通行业案例 - 金融行业外设接入场景分享.pdf 【统一生态】设备互联互通行业案例-政企办公行业场景分享.pdf 【鸿蒙生态伙伴SDK】Flutter在HarmonyOS中的开发实践.pdf 【鸿蒙生态伙伴SDK】uni-app助力开发者快速构建高性能鸿蒙原生应用.pdf 【鸿蒙生态伙伴SDK】Weex跨平台开发策略助力航班管家高效开发鸿蒙原生应用.pdf 【鸿蒙生态伙伴SDK】共创共赢,鸿蒙生态伙伴SDK大展“鸿”图.pdf 【鸿蒙生态伙伴SDK】凡泰极客FinClip SDK 加速轻量级鸿蒙原生应用开发.pdf 【鸿蒙生态伙伴SDK】多框架并存-58同城高性能体验升级.pdf 【鸿蒙生态伙伴SDK】携手鸿蒙生态伙伴,共建繁荣生态之路.pdf 【鸿蒙生态伙伴SDK】生态市场携手服务商伙伴 联合创新共谋商业成功.pdf 【鸿蒙生态伙伴SDK】生态管理模式安全可控 构建鸿蒙生态伙伴SDK安全新秩序.pdf 【鸿蒙生态伙伴SDK】科蓝SDK在金融领域鸿蒙原生应用开发中的实践.pdf 【鸿蒙生态伙伴SDK】聚焦OpenHarmony方库重点垂域 持续丰富方开源多元体验.pdf 【鸿蒙生态伙伴SDK】蚂蚁mPaaS,为鸿蒙原生应用高效开发注入创新动力.pdf 【鸿蒙生态伙伴SDK】阿里云MediaBox音视频SDK开发实践经验分享.pdf 【鸿蒙生态伙伴SDK】鸿蒙生态伙伴SDK市场上线仪式.pdf

571

社区成员

发帖
与我相关
我的任务
社区描述
OpenHarmony开发者社区
其他 企业社区
社区管理员
  • csdnsqst0025
  • shewaliujingli
  • BaoWei
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧