当前位置: 首页 > 科技观察

OpenHarmony标准设备应用开发-分布式数据管理

时间:2023-03-15 08:31:00 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com中上一章,我们讲解了如何通过分布式音乐播放器、分布式炸弹、分布式购物车在OpenAtomOpenHarmony(以下简称“OpenHarmony”)的布局中使用相关控件,以及如何在OpenHarmony中使用。如何实现音乐播放、展示动画、转场动画(页面间转场)等功能。本章是OpenHarmony标准设备应用开发的第三篇文章。在前面两章的基础上,给大家讲解一下多设备间的分布式数据管理。当数据发生变化时,可以实现多设备订阅。数据同步更新。为了更好地理解,我们使用eTS开发了一个TicTacToe游戏,如下面的动画所示,以解释分布式数据管理在应用程序中的使用。Demo介绍:Demo是基于OpenHarmony系统使用eTS语言编写的。本Demo主要通过设备认证、分布式上拉、分布式数据管理等功能实现。项目创建和页面布局等,这里不再赘述。本章重点介绍自定义弹出窗口和分布式数据管理。自定义弹窗通过对自定义弹窗的讲解,希望大家能够学会如何在项目中实现自己的自定义弹窗。1.1使用@CustomDialog装饰器创建自定义弹窗。使用方法请参考自定义弹窗:官方参考链接:https://gitee.com/openharmony/docs/blob/OpenHarmony-3.1-Beta/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md1.2布局从上到下由Text、List、Button组成,List中的子元素由Text和Radio组成。以下代码省略号表示非UI相关的逻辑代码。具体实现参考源码:@CustomDialogstructgameStart{build(){Flex({direction:FlexDirection.Column,alignItems:ItemAlign.Center,justifyContent:FlexAlign.Center}){Flex({direction:FlexDirection.Column,alignItems:ItemAlign.Center,justifyContent:FlexAlign.Center}){//ToptitleText('发现以下在线设备').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(item.deviceName).width('80%').fontSize(30).fontColor(Color.Black)//Radio组件显示单选按钮Radio({value:''}).checked(this.check[item.id]).onChange(()=>{//这样可以保证在List中点击多个Radio组件时,只选择当前点击的那个for(leti=0;iitem.id)}.height('80%')Flex({direction:FlexDirection.Column,alignItems:ItemAlign.Center,justifyContent:FlexAlign.Center}){Button('OK').width(200).height(50).fontSize(30).onClick(()=>{//...这个.controller。close()})}.height('30%')}.width('100%').height('80%')}.height('100%').width('100%')}}通过上面的方法,我们就可以完成我们的自定义弹窗,你也可以尝试在自己的项目中完成自己的自定义弹窗分布式数据管理分布式数据管理可以在多个设备之间,当数据出现时发生变化,数据同步多设备间的同步更新是通过订阅实现的。当我们需要在多个设备之间同步数据更新时,我们可以使用分布式数据管理来实现。井字通三关游戏,通过分布式数据管理,实现多设备间游戏界面的同步更新,实现多设备同时玩游戏的功能。官网参考链接:https://gitee.com/openharmony/docs/blob/OpenHarmony-3.1-Beta/zh-cn/application-dev/reference/apis/js-apis-distributed-data.md数据示意图分布式运行,如下。实现步骤:分布式数据管理依赖@ohos.data.distributedData模块实现。详见项目源码中RemoteDataManager.ets的实现步骤。2.1从'@ohos.data.distributedData'导入模块导入工厂;2.2创建用于管理数据库对象的KVManager实例registerDataListCallback(callback){letthat=thisif(this.kvManager==null){try{constconfig={userInfo:{userId:'0',userType:0},bundleName:'com.example.tictactoegame'}factory.createKVManager(config).then((manager)=>{that.kvManager=managerthat.registerDataListCallback_(callback)}).catch((err)=>{})}catch(e){}}else{this.registerDataListCallback_(callback)}}注意:将bundleName修改为对应的内容2.3创建并获取KVStore数据库registerDataListCallback_(callback){letthat=thisif(that.kvManager==null){callback()返回}if(that.kvStore==null){try{letoptions={createIfMissing:true,encrypt:false,backup:false,autoSync:true,kvStoreType:1,securityLevel:3}this.kvManager.getKVStore(this.STORE_ID,options).then((store)=>{that.kvStore=storethat._registerDataListCallback_(callback)}).catch(((商店)=>{that.kvStore=storethat._registerDataListCallback_(callback)}).catch((err)=>{})}catch(e){}}else{this._registerDataListCallback_(callback)}}注:STORE_ID改为对应内容2.4订阅指定类型的数据变更通知_registerDataListCallback_(callback){letthat=thisif(that.kvManager==null){callback()return}this.kvStore.on('dataChange',1,function(data){if(data){that.arr=data.updateEntries回调()}})}备注:kvStore.on方法中的1对应订阅类型。具体见上面官网参考中的详细说明。2.5向数据库添加指定类型的键值对dataChange(key,value){letthat=thistry{that.kvStore.put(JSON.stringify(key),JSON.stringify(value)).then(data)=>{}).catch((err)=>{prompt.showToast({message:'puterr:'+JSON.stringify(value)})})}catch(e){}}项目下载链接:https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/FA/Entertainment/TicTacToeGame相关问题描述:分布式数据管理的数据传输过程中,如果数据中包含汉字,会出现乱码,所以在数据存储中,尽量不要使用中文。通过这次三章的讲解,我们知道了如何从零开始在标准设备上运行最简单的OpenHarmony程序,并在此基础上,我们知道了如何播放音乐、显示动画、转场动画等相关高级技能,以及如何通过分布式数据管理实现多设备间的数据同步更新。更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com