• Lv1
    粉丝0

积分0 / 贡献0

提问1答案被采纳0文章0

作者动态

    Openharmony 5.1版本进行分布式数据对象同步时,无法数据同步

    ikun 显示全部楼层 发表于 2026-4-17 11:05:08

    设备型号:3588

    鸿蒙版本:5.1.1

    API :18

    代码

    // 分布式数据对象模块
    import { distributedDataObject } from '@kit.ArkData';
    // 分布式数据对象的属性实体类
    import DistributedSensorDevice from '../model/DistributedSensorDevice'
    // 分布式数据对象建立同步的sessionId
    import { SESSION_ID } from './CommonConstants'
    import { common } from '@kit.AbilityKit';
    import { ErrorEvent } from '@kit.ArkTS';
    
    export default class DistributedObjectUtil {
      // 单例模式
      private static distributedObjectModel:DistributedObjectUtil = new DistributedObjectUtil()
      private constructor() {
      }
      public static newInstance() {
        return DistributedObjectUtil.distributedObjectModel
      }
    
      @Track public  localObject: distributedDataObject.DataObject|null = null
      // 创建分布式数据对象
      createDistributedDataObject(context:common.UIAbilityContext, source:DistributedSensorDevice, callback:(result:string)=> void) {
        try {
          // 创建分布式数据对象
          this.localObject = distributedDataObject.create(context, source);
          console.log(`createDistributedDataObject success`)
          // 将成功的消息传递给callback
          callback(`createDistributedDataObject success`)
          // 设置sessionId
          this.localObject.setSessionId(SESSION_ID,()=>{
            console.error(`setSessionId sucess`)
          });//distributedDataObject.genSessionId()
        }catch(error) {
          let e = error as ErrorEvent
          console.error(`createDistributedDataObject err:${JSON.stringify(e)}`)
          callback(`createDistributedDataObject err:${JSON.stringify(e)}`)
        }
      }
    
      // 添加分布式数据对象数据改变的监听
      addDistributedDataObjectListener(callback:(sessionId: string,fields: Array<string>)=>void) {
        if(this.localObject == null) {
          console.error(`addDistributedDataObjectListener localObject is null`)
          return
        }
        console.error(`DistributedObjectUtil change `)
        this.localObject.on("change", callback)// 绑定数据改变的监听
        // this.localObject.on("change", (sessionId: string, fields: Array<string>) => {
        //   console.error(`change callback `,sessionId,"fields =",fields)
        // })// 绑定数据改变的监听
    
      }
    
      // 添加设备在线/离线状态改变的监听
      addDistributedDataObjectStatusListener(callback:(sessionId: string,
                                                       networkId: string,
                                                       status: "online" | "offline")=>void) {
        if(this.localObject == null) {
          console.error(`addDistributedDataObjectListener localObject is null`)
          return
        }
        console.error(`DistributedObjectUtil status `)
        // 绑定设备状态改变的监听
        this.localObject.on("status",callback)
        //   this.localObject.on("status", (sessionId: string, networkId: string, status: "online" | "offline") => {
        //   console.error(` status `,status,"  sessionId ="+sessionId)
        // })
      }
    
      // 删除监听
      closeDistributedDataObjectListener() {
        if(this.localObject == null) {
          console.error(`addDistributedDataObjectListener localObject is null`)
          return
        }
        console.error(`DistributedObjectUtil close `)
        this.localObject?.off('change');
        this.localObject?.off('status');
      }
    }
    

    代码可以进行创建,设置session,但是数据上下线以及数据改变的的监听回调,都没有执行。

    并且日志里数据对象都有在创建,

    两台设备蓝牙已开启,处于同一个网络,可以进行组网认证。

    当开启数据监听回调的时候,日志显示如下

    01-01 08:35:00.938   5614-5614     C057c2/IPCObjectProxy           com.examp...tributed  E     SendRequest 181: failed, handle:0 error:7 desc:*.accessToken proxy:3101202800 time:2099248332528
    01-01 08:35:00.938   5614-5614     C04170/DSched_Service           com.examp...tributed  E     DmsSaClient::GetDSchedEventInfo Get SA manager proxy fail.
    01-01 08:35:00.938   5614-5614     C04170/DSched_Service           com.examp...tributed  E     DmsHandle::GetDSchedEventInfo DmsSaClient GetDSchedEventInfo fail, ret 2097167.
    01-01 08:35:00.938   5614-5614     C01652/ObjectStore-x            com.examp...tributed  E     157: GetDeviceList Get collaboration events failed, error code = 29360174
    01-01 08:35:00.938   5614-5614     C01630/DistributedDB            com.examp...tributed  I     [NAdapt][SearchOnline] onlineDev count = 0.
    
    01-01 08:43:40.226   5614-5614     C01630/DistributedDB            com.examp...tributed  I     [Syncer] LocalDataChanged no online standard devices, Label=93B5B6

    在4.2版本API10的版本下是正常运行的。设备更新升级到5.1,api升级至18的时候,就出现此问题,各位大佬,帮帮忙,是哪里更新了,还是其他问题?

    感谢~~~~

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 | 京公网安备11030102011662号 |技术支持 Discuz!

    返回顶部