0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過分布式數(shù)據(jù)管理實(shí)現(xiàn)多臺(tái)設(shè)備間的數(shù)據(jù)同步更新

電子發(fā)燒友開源社區(qū) ? 來源:HarmonyOS官方合作社區(qū) ? 作者:HarmonyOS官方合作社 ? 2022-02-25 11:47 ? 次閱讀

上一章,我們通過分布式音樂播放器、分布式炸彈、分布式購物車,帶大家講解了 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)中,相關(guān)控件在布局中如何使用,以及在 OpenHarmony 中如何實(shí)現(xiàn)音樂播放,顯示動(dòng)畫,轉(zhuǎn)場動(dòng)畫(頁面間轉(zhuǎn)場)等功能。本章是 OpenHarmony 標(biāo)準(zhǔn)設(shè)備應(yīng)用開發(fā)的第三篇文章,將會(huì)在前面兩章的基礎(chǔ)上給大家講解分布式數(shù)據(jù)管理在多臺(tái)設(shè)備間,當(dāng)數(shù)據(jù)出現(xiàn)變動(dòng)時(shí),通過訂閱的方式,實(shí)現(xiàn)多臺(tái)設(shè)備間的數(shù)據(jù)同步更新。

為了更好的理解,我們使用 eTS 開發(fā)了一款如下動(dòng)圖所示的井字過三關(guān)游戲來講解分布式數(shù)據(jù)管理在應(yīng)用中的使用。

Demo 簡介:Demo 基于 OpenHarmony 系統(tǒng)使用 eTS 語言進(jìn)行編寫,本 Demo 主要通過設(shè)備認(rèn)證,分布式拉起,分布式數(shù)據(jù)管理等功能來實(shí)現(xiàn)。

項(xiàng)目創(chuàng)建以及頁面布局等,這里就不再贅述,本章重點(diǎn)講解自定義彈窗以及分布式數(shù)據(jù)管理。

自定義彈窗

通過對(duì)自定義彈窗的講解,希望能讓大家學(xué)到如何在項(xiàng)目中實(shí)現(xiàn)自己的自定義彈窗。

1.1 通過 @CustomDialog 裝飾器來創(chuàng)建自定義彈窗,使用方式可參考 自定義彈窗:

1.2 布局從上到下由 Text、List、Button 組成,List 中的子元素由 Text 和 Radio 組成,以下代碼的省略號(hào)表示非 UI 相關(guān)的邏輯代碼,具體實(shí)現(xiàn)參考源代碼:


	@CustomDialogstruct gameStart { build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { //頂部標(biāo)題 Text('發(fā)現(xiàn)以下在線設(shè)備').fontColor(Color.Black).fontSize(30) }.width('100%').height('20%')  Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { //使用List容器動(dòng)態(tài)加載在線設(shè)備 List() { ForEach(this.deviceName, (item) => { ListItem() { Row() { //Text組件顯示設(shè)備名 Text(item.deviceName).width('80%').fontSize(30).fontColor(Color.Black) //Radio組件顯示單選框 Radio({ value: '' }).checked(this.check[item.id]).onChange(() => { //這里保證List里面點(diǎn)擊了多個(gè)Radio組件時(shí),只有當(dāng)前點(diǎn)擊的為選中狀態(tài) 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%') }}
	

通過上述方式,完成我們的自定義彈窗,大家也可以在自己的項(xiàng)目中嘗試完成自己的自定義彈窗。

分布式數(shù)據(jù)管理

分布式數(shù)據(jù)管理,可以在多臺(tái)設(shè)備間,當(dāng)數(shù)據(jù)出現(xiàn)變動(dòng)時(shí),通過訂閱的方式,實(shí)現(xiàn)多臺(tái)設(shè)備間的數(shù)據(jù)同步更新。當(dāng)我們需要在多臺(tái)設(shè)備間實(shí)現(xiàn)數(shù)據(jù)的同步更新,就可以使用分布式數(shù)據(jù)管理來實(shí)現(xiàn)。井字過三關(guān)游戲,通過分布式數(shù)據(jù)管理,實(shí)現(xiàn)多臺(tái)設(shè)備間游戲界面的同步更新,實(shí)現(xiàn)多臺(tái)設(shè)備同玩一個(gè)游戲的功能。

數(shù)據(jù)分布式運(yùn)作示意圖,如下所示。

如何通過分布式數(shù)據(jù)管理實(shí)現(xiàn)多臺(tái)設(shè)備間的數(shù)據(jù)同步更新

實(shí)現(xiàn)步驟:分布式數(shù)據(jù)管理依賴 @ohos.data.distributedData 模塊實(shí)現(xiàn),詳細(xì)參考項(xiàng)目源碼中的 RemoteDataManager.ets 實(shí)現(xiàn)步驟。

2.1 導(dǎo)入該模塊


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

2.2 創(chuàng)建 KVManager 實(shí)例,用于管理數(shù)據(jù)庫對(duì)象


	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 改成對(duì)應(yīng)內(nèi)容

2.3 創(chuàng)建并獲取 KVStore 數(shù)據(jù)庫


	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 改成對(duì)應(yīng)內(nèi)容

2.4 訂閱指定類型的數(shù)據(jù)變更通知


	_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 對(duì)應(yīng)訂閱的類型,具體詳情看上面官網(wǎng)參考中的詳細(xì)描述。

2.5 添加指定類型鍵值對(duì)到數(shù)據(jù)庫


	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) { }} 
	

相關(guān)問題說明:分布式數(shù)據(jù)管理數(shù)據(jù)傳輸過程中,如果數(shù)據(jù)中包含中文,會(huì)出現(xiàn)亂碼,所以數(shù)據(jù)存儲(chǔ)中,盡量不要使用中文。

通過此次三個(gè)章節(jié)的講解,我們知道了如何從零到有在標(biāo)準(zhǔn)設(shè)備上運(yùn)行一個(gè)最簡單的 OpenHarmony 程序,并在此基礎(chǔ)上,知道了如何在 OpenHarmony 中做到音樂播放,顯示動(dòng)畫,轉(zhuǎn)場動(dòng)畫等相關(guān)進(jìn)階技能,以及如何通過分布式數(shù)據(jù)管理在多臺(tái)設(shè)備之間實(shí)現(xiàn)數(shù)據(jù)的同步更新。在后續(xù) OpenHarmony 最新版本中,我們會(huì)有更多新的特性,更多的開發(fā)板,以及更多的樣例帶給大家,敬請(qǐng)期待。

原文標(biāo)題:OpenHarmony標(biāo)準(zhǔn)設(shè)備應(yīng)用開發(fā)(三)——分布式數(shù)據(jù)管理

文章出處:【微信公眾號(hào):HarmonyOS官方合作社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7026

    瀏覽量

    89025
  • 設(shè)備
    +關(guān)注

    關(guān)注

    2

    文章

    4509

    瀏覽量

    70637
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16313

原文標(biāo)題:OpenHarmony標(biāo)準(zhǔn)設(shè)備應(yīng)用開發(fā)(三)——分布式數(shù)據(jù)管理

文章出處:【微信號(hào):HarmonyOS_Community,微信公眾號(hào):電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開發(fā)實(shí)例:【分布式數(shù)據(jù)管理

    eTS中分布式數(shù)據(jù)管理的使用,包括KVManager對(duì)象實(shí)例的創(chuàng)建和KVStore數(shù)據(jù)流轉(zhuǎn)的使用。
    的頭像 發(fā)表于 04-11 09:57 ?938次閱讀
    HarmonyOS開發(fā)實(shí)例:【<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)管理</b>】

    分布式軟件系統(tǒng)

    、分布式程序設(shè)計(jì)語言及其編譯(解釋)系統(tǒng)、分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)等。 分布式操作系統(tǒng)負(fù)責(zé)管理
    發(fā)表于 07-22 14:53

    HarmonyOS分布式數(shù)據(jù)庫,為啥這么牛?

    基于應(yīng)用掃碼認(rèn)證的賬號(hào)無關(guān)的設(shè)備連接認(rèn)證方式,應(yīng)用可以通過掃碼的方式來完成設(shè)備的認(rèn)證。 對(duì)于應(yīng)用掃碼完成設(shè)備認(rèn)證的結(jié)果,只能對(duì)同應(yīng)用的沙
    發(fā)表于 11-19 15:38

    如何通過基于云的數(shù)據(jù)管理技術(shù)實(shí)現(xiàn)分布式設(shè)備的態(tài)勢感知?

    如何通過基于云的數(shù)據(jù)管理技術(shù)實(shí)現(xiàn)分布式設(shè)備的態(tài)勢感知?
    發(fā)表于 05-25 06:56

    HarmonyOS實(shí)戰(zhàn)—基于分布式能力,實(shí)現(xiàn)設(shè)備同步書寫互動(dòng)

    1. 介紹分布式手寫板利用分布式數(shù)據(jù)庫和分布式設(shè)備啟動(dòng)與連接實(shí)現(xiàn)。每臺(tái)設(shè)備在書寫的時(shí)候,連接的
    發(fā)表于 09-03 17:14

    HarmonyOS教程—基于分布式數(shù)據(jù)接口,實(shí)現(xiàn)多種設(shè)備上一致的數(shù)據(jù)訪問體驗(yàn)

    分布式數(shù)據(jù)庫中。通過結(jié)合帳號(hào)、應(yīng)用和數(shù)據(jù)庫三元組,分布式數(shù)據(jù)服務(wù)對(duì)屬于不同的應(yīng)用的數(shù)據(jù)進(jìn)行隔離
    發(fā)表于 09-26 11:40

    分布式軟總線實(shí)現(xiàn)近場設(shè)備統(tǒng)一的分布式通信管理能力如何?

    現(xiàn)實(shí)中多設(shè)備通信方式多種多樣(WIFI、藍(lán)牙等),不同的通信方式使用差異大,導(dǎo)致通信問題多;同時(shí)還面臨設(shè)備通信鏈路的融合共享和沖突無法處理等挑戰(zhàn)。那么
    發(fā)表于 03-16 11:03

    OpenHarmony標(biāo)準(zhǔn)設(shè)備應(yīng)用開發(fā)筆記匯總

    應(yīng)用開發(fā)的第三篇文章,將會(huì)在前面兩章的基礎(chǔ)上給大家講解分布式數(shù)據(jù)管理多臺(tái)設(shè)備,當(dāng)數(shù)據(jù)出現(xiàn)變動(dòng)
    發(fā)表于 03-28 14:19

    基于OpenHarmony3.1開發(fā)的一個(gè)分布式手寫板應(yīng)用

    1.介紹基于TS擴(kuò)展的聲明開發(fā)范式開發(fā)一個(gè)分布式手寫板應(yīng)用。涉及的OS特性有分布式拉起和分布式數(shù)據(jù)管理,使用這兩個(gè)特性
    發(fā)表于 04-07 11:42

    OpenHarmony標(biāo)準(zhǔn)設(shè)備應(yīng)用開發(fā)(三)——分布式數(shù)據(jù)管理

    數(shù)據(jù)同步更新。當(dāng)我們需要在多臺(tái)設(shè)備實(shí)現(xiàn)
    發(fā)表于 04-07 18:48

    OpenHarmony3.1分布式技術(shù)資料合集

    手寫板應(yīng)用。涉及的OS特性有分布式拉起和分布式數(shù)據(jù)管理,使用這兩個(gè)特性實(shí)現(xiàn)不同設(shè)備拉起與筆跡
    發(fā)表于 04-11 11:50

    OpenHarmony 3.1 Beta版本關(guān)鍵特性解析——分布式DeviceProfile

    采集本設(shè)備設(shè)備信息;? HiChain:設(shè)備互信認(rèn)證服務(wù),管理設(shè)備的可信群組;? 分布式
    發(fā)表于 04-25 11:14

    【學(xué)習(xí)打卡】OpenHarmony的分布式數(shù)據(jù)管理介紹

    分布式數(shù)據(jù)管理,英文縮寫是DDM,是對(duì)一個(gè)系統(tǒng)中創(chuàng)建和收集的數(shù)據(jù)的提取、存儲(chǔ)、組織和維護(hù)的過程進(jìn)行的有效控制和管理。有效的數(shù)據(jù)管理對(duì)于運(yùn)行應(yīng)
    發(fā)表于 07-15 15:49

    【學(xué)習(xí)打卡】OpenHarmony的分布式任務(wù)調(diào)度

    之前我們分享過分布式軟總線和分布式數(shù)據(jù)管理,今天主要說一下OpenHarmony的分布式任務(wù)調(diào)度,分布式任務(wù)調(diào)度是建立在
    發(fā)表于 07-18 17:06

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (分布式數(shù)據(jù)管理)】

    分布式數(shù)據(jù)管理為應(yīng)用程序提供不同設(shè)備數(shù)據(jù)庫的分布式協(xié)同能力。通過調(diào)用
    的頭像 發(fā)表于 06-07 09:30 ?996次閱讀
    鴻蒙開發(fā)接口<b class='flag-5'>數(shù)據(jù)管理</b>:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)管理</b>)】