HarmonyOS 数据持久化后同步问题

当前需求需要将同步的数据保存到本地,后期对数据处理后需要发送通知到各个位置,但是保存本地后发送通知通知到页面后调用数据的时候明明接收和定义的类型是一致的但是就是无法进行赋值,导致数据不能同步,报TypeError: Obj is not a Valid object。

代码:

import { BusManager } from './BusManager';
import { StockGroupModel } from './StockGroupModel';
import { StockUtils } from './StockUtils';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
  @State allGroups: StockGroupModel[] = []
  aboutToAppear(): void {
    BusManager.getInstance().register("STOCK_GROUP_UPDATE", this.updateAllGroups)

    StockUtils.shared().queryGroups().then((val) => {
      this.allGroups = val
    })
  }
  //  监听方法,本地保存后会调用,用来进行数据同步刷新UI展示
  updateAllGroups() {
    StockUtils.shared().getAllGroups()
      .then((val: StockGroupModel[]) => {
        //  这里的左右两侧数据类型一致为什么会出错呢?
        this.allGroups = val
      })
      .catch((error: BusinessError) => {
        //  为什么会在这里报TypeError: Obj is not a Valid object@12f7ed7a
        console.log(error)
      })
  }
  build() {
    Column() {
      List({ space: 12 }) {
        ListItem() {
          Button("首次安装点击,模拟接口同步数据保存到本地")
            .width("100%")
            .padding({ top: 8, bottom: 8 })
            .onClick(() => {
              StockUtils.shared().syncGroups()
                .then(() => {
                  this.allGroups = StockUtils.shared().allGroups
                })
                .catch((error: BusinessError) => {
                  console.log(error)
                })
            })
        }
        ListItem() {
          Button("模拟请求接口并在本地插入数据")
            .width("100%")
            .padding({ top: 8, bottom: 8 })
            .onClick(() => {
              StockUtils.shared().addStock([0], ["SH600001", "SZ002013"])
                .then((val: boolean) => {
                  console.log(" ADD SUCCESS")
                })
                .catch((error: BusinessError) => {
                  console.log(error)
                })
            })
        }
        ListItem() {
          Text(this.allGroups.length > 0 ? JSON.stringify(this.allGroups) : "此处用来展示同步后的数据")
            .width("100%")
            .textAlign(TextAlign.Center)
        }
      }
      .layoutWeight(1)
    }
    .width("100%")
    .height("100%")
  }
}
HarmonyOS
2024-12-27 14:04:48
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

是因为在注册方法时没有绑定this ,执行时this为undifined。index.ets 15行改成BusManager.getInstance().register("STOCK_GROUP_UPDATE", this.updateAllGroups.bind(this))

分享
微博
QQ
微信
回复
2024-12-27 16:16:24
相关问题
关于数据持久使用问题
702浏览 • 1回复 待解决
网络请求创建持久问题
1145浏览 • 1回复 待解决
数据持久遇到的各种问题
650浏览 • 1回复 待解决
HarmonyOS 数据持久demo
414浏览 • 1回复 待解决
如何在IDE每次run项目数据持久
1075浏览 • 1回复 待解决
PersistentStorage持久存储问题
1128浏览 • 0回复 待解决
HarmonyOS 基本类型数据持久
489浏览 • 1回复 待解决
数据持久的方式有哪些?
1489浏览 • 1回复 待解决
如何实现应用数据持久存储
2689浏览 • 1回复 待解决
HarmonyOS 如何进行数据持久
661浏览 • 1回复 待解决
卡片开发中如何实现数据持久
2632浏览 • 1回复 待解决
关于数据持久存储要如何实现
1028浏览 • 2回复 待解决
HarmonyOS 数据同步问题
215浏览 • 1回复 待解决
求大佬告知如何实现数据持久
1029浏览 • 1回复 待解决