精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS開發實例:【分布式數據管理】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-11 09:57 ? 次閱讀

介紹

本示例展示了在eTS中分布式數據管理的使用,包括KVManager對象實例的創建和KVStore數據流轉的使用。

通過設備管理接口[@ohos.distributedDeviceManager],實現設備之間的kvStore對象的數據傳輸交互,該對象擁有以下能力 ;
1、注冊和解除注冊設備上下線變化監聽
2、發現周邊不可信設備
3、認證和取消認證設備
4、查詢可信設備列表
5、查詢本地設備信息,包括設備名稱,設備類型和設備標識
6、發布設備發現

效果預覽

image.png

使用說明 |

1.兩臺設備組網。

2.在一臺界面中點擊右上角的流轉按鈕,在彈窗中選擇對端設備拉起對端設備上的應用。

3.拉起對端設備后,在界面中點擊"+"按鈕新增筆記卡片,點擊每個卡片右上角的"X"按鈕可以刪除此卡片,可以看到對端設備和當前設備界面數據保持一致。

4.操作對端設備,當前設備界面也會保持和對端設備界面顯示一致。

搜狗高速瀏覽器截圖20240326151450.png

具體實現

管理kvStore

1、頁面初始化時獲取此應用所需能力:引入@ohos.data.distributedKVStore初始化kvstore數據庫并對使用kvstore.on數據change進行監聽,通過appstorge判斷獲取相應的key判斷是否是分布式節點 。

源碼:

/*

 * Copyright (c) 2020-2023 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



import abilityAccessCtrl from '@ohos.abilityAccessCtrl'

import common from '@ohos.app.ability.common'

import { NoteModel } from '../model/NoteDataModel'

import { NoteListItem } from '../common/NoteItem'

import NoteDataSource from '../common/BasicDataSource'

import { TitleBar } from '../common/TitleBar'

import { KvStoreModel } from '../model/KvStoreModel'

import { RemoteDeviceModel } from '../model/RemoteDeviceModel'

import { transStrToNoteModel } from '../model/NoteDataModel'

import Logger from '../util/Logger'

import Want from '@ohos.app.ability.Want';



const NOTES_CHANGE = 'notesChange'

const EXIT = 'exit'

let kvStoreModel: KvStoreModel = new KvStoreModel()

let notesNum: number = 0

const TAG = 'KvstoreIndexPage'



@Entry

@Component

struct Index {

  private noteDataSource: NoteDataSource = new NoteDataSource([new NoteModel('', '')]);

  @State isDistributed: boolean = false

  private remoteDeviceModel: RemoteDeviceModel = new RemoteDeviceModel()



  aboutToAppear() {

    let context = getContext(this) as common.UIAbilityContext

    let atManager = abilityAccessCtrl.createAtManager()

    try {

      atManager.requestPermissionsFromUser(context,['ohos.permission.DISTRIBUTED_DATASYNC']).then((data) = > {

        Logger.info(TAG, `data: ${JSON.stringify(data)}`)

      }).catch((err: object) = > {

        Logger.info(TAG, `err: ${JSON.stringify(err)}`)

      })

    } catch (err) {

      Logger.info(TAG, `catch err- >${JSON.stringify(err)}`);

    }

    let want = JSON.parse(AppStorage.Get('wantMsg')) as Want;

    Logger.info(TAG,`getWant =${JSON.stringify(want)}`);

    if(want.parameters != undefined) {

      if (want.parameters.isStage === 'Stage') {

        this.isDistributed = true

      }

    }

    kvStoreModel.setOnMessageReceivedListener(NOTES_CHANGE, (value) = > {

      Logger.info(TAG,`NOTES_CHANGE${value}`)

      if (this.isDistributed) {

        if (value.search(EXIT) !== -1) {

          Logger.info(TAG,`[json]EXIT${EXIT}`)

          context.terminateSelf((error) = > {

            Logger.info(TAG,`terminateSelf finished, error=${error}`)

          })

        } else {

          let str: string = value.substring(0, value.lastIndexOf('}]') + 2);

          this.noteDataSource.dataArray = transStrToNoteModel(str);

          this.noteDataSource.notifyDataReload()

          let strNum: string = value.substring(value.lastIndexOf('numBegin') + 'numBegin'.length, value.lastIndexOf('numEnd'));

          notesNum = Number(strNum)

        }

      }

    })

  }



  deleteNoteCallBack = (item: NoteModel) = > {

    Logger.info(TAG, `deleteNote${JSON.stringify(item)}`);

    let dataArray: NoteModel[] = this.noteDataSource.dataArray;

    for (let i = 0; i < dataArray.length; i++) {

      Logger.info(TAG, `i = ${i} and dataArray = ${JSON.stringify(dataArray[i])}`)

      if (dataArray[i].title === item.title) {

        Logger.info(TAG, `deleteNote index` + i);

        this.noteDataSource.dataArray.splice(i, 1);

        break

      }

    }

    this.noteDataSource.notifyDataReload()

    kvStoreModel.put(NOTES_CHANGE, JSON.stringify(this.noteDataSource.dataArray) + 'numBegin' + notesNum + 'numEnd');

  }

  startAbilityCallBack = (key: string) = > {

    Logger.info(TAG,`startAbilityCallBack${key}`);

    if (NOTES_CHANGE === key) {

      kvStoreModel.put(NOTES_CHANGE, `${JSON.stringify(this.noteDataSource.dataArray)}numBegin${notesNum}numEnd`);

    }

    if (EXIT === key) {

      kvStoreModel.put(NOTES_CHANGE, EXIT)

    }

  }



  build() {

    Column() {

      TitleBar({

        startAbilityCallBack: this.startAbilityCallBack,

        remoteDeviceModel: this.remoteDeviceModel,

        isDistributed: $isDistributed

      })



      Grid() {

        LazyForEach(this.noteDataSource, (item: NoteModel, index) = > {

          GridItem() {

            NoteListItem({

              note: item,

              deleteNoteCallBack: this.deleteNoteCallBack,

              noteID: index

            })

          }

          .onClick(() = > {

            Logger.info(TAG,`GridItem.click${item.title}`);

            if (item.title === '' && item.content === '') {

              notesNum += 1

              this.noteDataSource.dataArray[this.noteDataSource.dataArray.length-1] = new NoteModel(`note ${notesNum}`, 'noteContent');

              this.noteDataSource.dataArray.push(new NoteModel('', ''));

              this.noteDataSource.notifyDataReload()

              if (this.isDistributed) {

                kvStoreModel.put(NOTES_CHANGE, `${JSON.stringify(this.noteDataSource.dataArray)}numBegin${notesNum}numEnd`);

              }

            }

          })

        }, (item: NoteModel) = > item.title)

      }

      .columnsTemplate('1fr 1fr 1fr')

      .columnsGap(10)

      .rowsGap(10)

      .padding(10)

      .margin({ bottom: 50 })

    }

  }



  onDestroy() {

    if (this.remoteDeviceModel !== null) {

      this.remoteDeviceModel.unregisterDeviceListCallback()

    }

    if (this.isDistributed) {

      this.isDistributed = false

    }

  }

}

2、如果是分布式節點,如果數據發生變化,處理數據并使用.noteDataSource()進行reload數據。
3、頁面通過kvStore對象進行增刪改查會觸發其他已連接設備的kvStore.on監聽。

管理分布式設備(節點)

1、創建設備管理對象,并指定參數kvstore應用包deviceManager.createDeviceManager("ohos.samples.kvstore", (error, value) => {})
2、獲取可信設備列表,"this.deviceManager.getTrustedDeviceListSync())" 。
3、監聽設備狀態,"this.deviceManager.on('deviceStateChange', (data) => {})",從而對可信設備列表管理。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據管理
    +關注

    關注

    1

    文章

    290

    瀏覽量

    19609
  • 分布式
    +關注

    關注

    1

    文章

    880

    瀏覽量

    74470
  • HarmonyOS
    +關注

    關注

    79

    文章

    1967

    瀏覽量

    30033
  • OpenHarmony
    +關注

    關注

    25

    文章

    3665

    瀏覽量

    16161
收藏 人收藏

    評論

    相關推薦

    HarmonyOS實戰案例:【分布式賬本】

    Demo基于Open Harmony系統使用ETS語言進行編寫,本Demo主要通過設備認證、分布式拉起、分布式數據管理等功能來實現。
    的頭像 發表于 04-12 16:40 ?1269次閱讀
    <b class='flag-5'>HarmonyOS</b>實戰案例:【<b class='flag-5'>分布式</b>賬本】

    #硬聲創作季 #HarmonyOS HarmonyOS應用開發-06.1 分布式數據管理平臺設計理念-2

    平臺數據管理HarmonyOS
    水管工
    發布于 :2022年11月16日 11:58:49

    HarmonyOS應用開發-分布式任務調度

    1. 介紹本篇CodeLab將實現的內容HarmonyOS是面向全場景多終端的分布式操作系統,使得應用程序的開發打破了智能終端互通的性能和數據壁壘,業務邏輯原子化
    發表于 09-18 09:21

    HarmonyOS應用開發-分布式設計

    設計理念HarmonyOS 是面向未來全場景智慧生活方式的分布式操作系統。對消費者而言,HarmonyOS 將生活場景中的各類終端進行能力整合,形成“One Super Device”,以實現
    發表于 09-22 17:11

    HarmonyOS分布式數據庫,為啥這么牛?

    HarmonyOS 2.0 重要的三大核心技術底座之一:HarmonyOS 分布式數據管理平臺,也同步對開發者進行了細致的宣講,我作為
    發表于 11-19 15:38

    如何通過基于云的數據管理技術實現分布式設備的態勢感知?

    如何通過基于云的數據管理技術實現分布式設備的態勢感知?
    發表于 05-25 06:56

    HarmonyOS分布式應用框架深入解讀

    著,一般默默地為開發者和用戶服務。基礎服務層:包括分布式調度管理分布式數據管理分布式硬件
    發表于 11-22 15:15

    如何高效完成HarmonyOS分布式應用測試?

    作者:liuxun,HarmonyOS測試架構師HarmonyOS是新一代的智能終端操作系統,給開發者提供了設備發現、設備連接、跨設備調用等豐富的分布式API。隨著越來越多的
    發表于 12-13 18:07

    基于OpenHarmony3.1開發的一個分布式手寫板應用

    1.介紹基于TS擴展的聲明開發范式開發一個分布式手寫板應用。涉及的OS特性有分布式拉起和分布式
    發表于 04-07 11:42

    OpenHarmony標準設備應用開發(三)——分布式數據管理

    設備應用開發的第三篇文章,將會在前面兩章的基礎上給大家講解分布式數據管理在多臺設備間,當數據出現變動時,通過訂閱的方式,實現多臺設備間的數據
    發表于 04-07 18:48

    【學習打卡】OpenHarmony的分布式數據管理介紹

    使用它來做出更明智的決策,如果一個系統缺乏適當的數據管理,那就可能會導致數據孤島、數據集之間不一致,甚至數據本身存在錯誤。有效的分布式
    發表于 07-15 15:49

    HarmonyOS數據管理與應用數據持久化(一)

    。 運作機制 數據管理模塊包括用戶首選項、鍵值型數據管理、關系型數據管理分布式數據對象和跨應用數據管理
    發表于 11-01 16:27

    HarmonyOS分布式數據管理三大核心技術是什么?

    隨著華為官方公布——將于 2021 年 4 月開放首批升級鴻蒙系統,預計屆時將會涌現一大批鴻蒙學習者,那么你對 HarmonyOS 分布式數據管理三大核心技術有多少了解呢? 這三大技術分別
    的頭像 發表于 03-14 10:54 ?5431次閱讀

    HarmonyOS分布式應用上架問題分析

    HarmonyOS是新一代的智能終端操作系統,給開發者提供了設備發現、設備連接、跨設備調用等豐富的分布式API。隨著越來越多的開發者投入到Harmo
    的頭像 發表于 12-24 17:56 ?1883次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>分布式</b>應用上架問題分析

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

    分布式數據管理為應用程序提供不同設備間數據庫的分布式協同能力。通過調用分布式數據各個接口,應用程
    的頭像 發表于 06-07 09:30 ?900次閱讀
    鴻蒙<b class='flag-5'>開發</b>接口<b class='flag-5'>數據管理</b>:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>數據管理</b>)】