0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过分布式数据管理实现多台设备间的数据同步更新

电子发烧友开源社区 来源:HarmonyOS官方合作社区 作者:HarmonyOS官方合作社 2022-02-25 11:47 次阅读

上一章,我们通过分布式音乐播放器、分布式炸弹、分布式购物车,带大家讲解了 OpenAtom OpenHarmony(以下简称“OpenHarmony”)中,相关控件在布局中如何使用,以及在 OpenHarmony 中如何实现音乐播放,显示动画,转场动画(页面间转场)等功能。本章是 OpenHarmony 标准设备应用开发的第三篇文章,将会在前面两章的基础上给大家讲解分布式数据管理在多台设备间,当数据出现变动时,通过订阅的方式,实现多台设备间的数据同步更新。

为了更好的理解,我们使用 eTS 开发了一款如下动图所示的井字过三关游戏来讲解分布式数据管理在应用中的使用。

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

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

自定义弹窗

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

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

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


	@CustomDialogstruct 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%') }}
	

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

分布式数据管理

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

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

如何通过分布式数据管理实现多台设备间的数据同步更新

实现步骤:分布式数据管理依赖 @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 程序,并在此基础上,知道了如何在 OpenHarmony 中做到音乐播放,显示动画,转场动画等相关进阶技能,以及如何通过分布式数据管理在多台设备之间实现数据的同步更新。在后续 OpenHarmony 最新版本中,我们会有更多新的特性,更多的开发板,以及更多的样例带给大家,敬请期待。

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

文章出处:【微信公众号:HarmonyOS官方合作社区】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7006

    浏览量

    88947
  • 设备
    +关注

    关注

    2

    文章

    4503

    浏览量

    70600
  • OpenHarmony
    +关注

    关注

    25

    文章

    3716

    浏览量

    16271

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

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HarmonyOS开发实例:【分布式数据管理

    eTS中分布式数据管理的使用,包括KVManager对象实例的创建和KVStore数据流转的使用。
    的头像 发表于 04-11 09:57 931次阅读
    HarmonyOS开发实例:【<b class='flag-5'>分布式</b><b class='flag-5'>数据管理</b>】

    分布式软件系统

    分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。 分布式操作系统负责管理
    发表于 07-22 14:53

    HarmonyOS分布式数据库,为啥这么牛?

    基于应用扫码认证的账号无关的设备连接认证方式,应用可以通过扫码的方式来完成设备的认证。 对于应用扫码完成设备认证的结果,只能对同应用的沙
    发表于 11-19 15:38

    如何通过基于云的数据管理威廉希尔官方网站 实现分布式设备的态势感知?

    如何通过基于云的数据管理威廉希尔官方网站 实现分布式设备的态势感知?
    发表于 05-25 06:56

    HarmonyOS实战—基于分布式能力,实现设备同步书写互动

    1. 介绍分布式手写板利用分布式数据库和分布式设备启动与连接实现。每台设备在书写的时候,连接的
    发表于 09-03 17:14

    HarmonyOS教程—基于分布式数据接口,实现多种设备上一致的数据访问体验

    分布式数据库中。通过结合帐号、应用和数据库三元组,分布式数据服务对属于不同的应用的数据进行隔离
    发表于 09-26 11:40

    分布式软总线实现近场设备统一的分布式通信管理能力如何?

    现实中多设备通信方式多种多样(WIFI、蓝牙等),不同的通信方式使用差异大,导致通信问题多;同时还面临设备通信链路的融合共享和冲突无法处理等挑战。那么
    发表于 03-16 11:03

    OpenHarmony标准设备应用开发笔记汇总

    应用开发的第三篇文章,将会在前面两章的基础上给大家讲解分布式数据管理多台设备,当数据出现变动
    发表于 03-28 14:19

    基于OpenHarmony3.1开发的一个分布式手写板应用

    1.介绍基于TS扩展的声明开发范式开发一个分布式手写板应用。涉及的OS特性有分布式拉起和分布式数据管理,使用这两个特性
    发表于 04-07 11:42

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

    数据同步更新。当我们需要在多台设备实现
    发表于 04-07 18:48

    OpenHarmony3.1分布式威廉希尔官方网站 资料合集

    手写板应用。涉及的OS特性有分布式拉起和分布式数据管理,使用这两个特性实现不同设备拉起与笔迹
    发表于 04-11 11:50

    OpenHarmony 3.1 Beta版本关键特性解析——分布式DeviceProfile

    采集本设备设备信息;ㆍ HiChain:设备互信认证服务,管理设备的可信群组;ㆍ 分布式
    发表于 04-25 11:14

    【学习打卡】OpenHarmony的分布式数据管理介绍

    分布式数据管理,英文缩写是DDM,是对一个系统中创建和收集的数据的提取、存储、组织和维护的过程进行的有效控制和管理。有效的数据管理对于运行应
    发表于 07-15 15:49

    【学习打卡】OpenHarmony的分布式任务调度

    之前我们分享过分布式软总线和分布式数据管理,今天主要说一下OpenHarmony的分布式任务调度,分布式任务调度是建立在
    发表于 07-18 17:06

    鸿蒙开发接口数据管理:【@ohos.data.distributedData (分布式数据管理)】

    分布式数据管理为应用程序提供不同设备数据库的分布式协同能力。通过调用
    的头像 发表于 06-07 09:30 973次阅读
    鸿蒙开发接口<b class='flag-5'>数据管理</b>:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>数据管理</b>)】