HarmonyOS鸿蒙Next中PersistenceV2存储数据,应用重启后数据丢失

HarmonyOS鸿蒙Next中PersistenceV2存储数据,应用重启后数据丢失

@ObservedV2
export class TeD{
  @Trace name:string = ""
}
@ObservedV2
class GData {
  @Trace
  public readonly global: TeD = PersistenceV2.connect(
    TeD,
    () => new TeD(),
  )!;

}

const gData: GData = new GData();

export { gData };

在lib_common定义GData,在module_login登录 设置

gData.global.name = "zavier"

应用重启之后数据没有了,没有保存zavier这个名字


更多关于HarmonyOS鸿蒙Next中PersistenceV2存储数据,应用重启后数据丢失的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

本地与一楼测试结果一样,重启应用未丢失数据。麻烦补全复现代码(如最小复现demo),让参与用户更快速复现您的问题;

import { PersistenceV2 } from "@kit.ArkUI"

@Entry
@Component
struct Index {
  gData: GData = new GData();

  build() {
    Column({ space: 16 }) {
      Row() {
        Text(this.gData.global.name)
      }

      Button('修改global.name为zavier')
        .onClick(() => {
          this.gData.global.name = 'zavier'
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

@ObservedV2
export class TeD {
  @Trace name: string = ""
}

@ObservedV2
class GData {
  @Trace
  public readonly global: TeD = PersistenceV2.connect(
    TeD,
    () => new TeD(),
  )!;
}

更多关于HarmonyOS鸿蒙Next中PersistenceV2存储数据,应用重启后数据丢失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Index.ets
import { gData } from '../models/demoModel'

@Entry
@Component
struct Index {
  build() {
    Column({ space: 16 }) {
      Row() {
        Text(gData.global.name)
      }

      Button('修改为 zavier')
        .onClick(() => {
          gData.global.name = "zavier"
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}
demoModel.ets
import { PersistenceV2 } from "@kit.ArkUI";

@ObservedV2
export class TeD{
  @Trace name:string = ""
}
@ObservedV2
class GData {
  @Trace
  public readonly global: TeD = PersistenceV2.connect(
    TeD,
    () => new TeD(),
  )!;

}

const gData: GData = new GData();

export { gData };

你好,我在上述 Demo 中测试 PersistenceV2 数据存储应用重启是能正常恢复的。无法复现你所描述的场景。能提供一个 git 仓库地址的最小化 demo 吗?

在HarmonyOS Next中,PersistenceV2数据丢失通常由以下原因导致:应用未正确调用flush或commit方法持久化数据;应用进程被系统强制终止,导致内存中未保存的数据丢失;存储路径权限配置不当。需确保在数据写入后执行持久化操作,并检查应用生命周期内数据保存逻辑是否完整。

从代码分析,数据丢失的主要原因是PersistenceV2的配置问题。在HarmonyOS Next中,PersistenceV2需要正确设置持久化路径才能确保数据在应用重启后保留。

问题在于PersistenceV2.connect()调用缺少必要的持久化配置参数。正确的做法应该是:

public readonly global: TeD = PersistenceV2.connect(
  TeD,
  "your_persistence_key", // 必须提供持久化标识
  () => new TeD(),
  { persistPath: "your_file_path" } // 需要指定持久化路径
)!;

关键点:

  1. 必须提供唯一的persistenceKey作为数据标识
  2. 需要配置persistPath指定数据存储位置
  3. 确保应用具有文件存储权限

检查应用配置文件中的权限声明,确保包含必要的存储权限。数据未持久化的根本原因是连接时缺少必要的持久化参数配置,导致数据仅存在于内存中,应用进程终止后自然丢失。

回到顶部