HarmonyOS鸿蒙Next中PersistenceV2 persistent_storage文件都有数据了,读取还是空的
HarmonyOS鸿蒙Next中PersistenceV2 persistent_storage文件都有数据了,读取还是空的
从Device File Browse中看数据都有的, 但是读取还是会走到默认值去
片段代码无法完整复现问题场景,请断点调试确认以下问题:
进入应用时 PersistenceV2.connect读取数据是否先于Entryability内loadContent执行。若PersistenceV2.connect先于Entryability内loadContent执行则会读取失败,详情参考:PersistenceV2: 持久化存储UI状态 使用限制中的第10条:PersistenceV2必须与UI实例关联,持久化操作需在UI实例初始化完成后调用(即loadContent回调触发后)。
若存在上述问题,请确认是否存在以下情况:
比如:
1.检查Entryability内逻辑是否存在PersistenceV2.connect先于loadContent执行的情况。
- 确认Entryability内是否存在引用PersistenceV2.connect所在的包的某个实例,由于一些关联因素导致PersistenceV2.connect所在的类优先于loadContent创建了。
比如:
commonlib内同时存在xxx与AccountUtil(AccountUtil中初始化PersistenceV2.connect方法)实例,且同时在commonlib包的commonlib/src/Index.ets文件中集体导出,该方式可以直接通过:
import { xxx } from 'commonlib';
直接导出xxx实例,但是该实例执行了commonlib/src/Index.ets文件,导致AccountUtil实例也被一起伴随着xxx的引用提前创建了。
则AccountUtil会执行在loadContent前。也就是PersistenceV2.connect会执行在loadContent前。导致本地数据读取失败。
方案一:
Entryability内取消,
import { xxx } from 'commonlib'
的导出方式。
import { xxx } from 'commonlib/src/main/ets/util/xxx';
或:
方案二:
保留在Entryability内
import { xxx } from 'commonlib'
的导出方式
取消在与xxx相同包中的commonlib/src/Index.ets文件中导出PersistenceV2.connect所在的AccountUtil类。或者将AccountUtil写在与xxx不同的包中,避免被优先创建。
更多关于HarmonyOS鸿蒙Next中PersistenceV2 persistent_storage文件都有数据了,读取还是空的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,这边测试没有复现,使用PersistenceV2可以实现持久化数据能力,不会返回默认的值。
麻烦您可以发下可以复现问题的demo以及DevEco Studio版本、设备版本号嘛,用于定位问题
import { PersistenceV2, Type } from '@kit.ArkUI';
@ObservedV2
class SampleClass {
p1?: number = 0;
p2?: number = 0;
}
@ObservedV2
class FatherSampleClass {
@Type(SampleClass)
@Trace f: SampleClass = new SampleClass();
}
@Entry
@ComponentV2
export struct TestPersistenceV2 {
@Local v: FatherSampleClass = PersistenceV2.connect(FatherSampleClass, () => new FatherSampleClass())!;
build() {
Column() {
Text(`ADD`)
.fontSize(32)
.onClick(() => {
let sample = new SampleClass();
sample.p1 = Date.now();
sample.p2 = (this.v.f.p2 ?? 0) + 1;
this.v.f = sample;
})
Text(`${JSON.stringify(this.v.f)}`)
.fontSize(32)
}
.width("100%")
.alignItems(HorizontalAlign.Center)
}
}
【背景知识】 PersistenceV2是应用程序中的可选单例对象,此对象的作用是持久化存储UI相关的数据,以确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同。
还没解决,
您好,已在2楼回复,
在HarmonyOS Next中,PersistenceV2的persistent_storage文件有数据但读取为空,通常是由于文件路径或访问权限问题导致。请检查应用沙箱路径是否正确,并确认文件操作权限已配置。确保使用正确的API进行读写,避免异步操作未完成时读取。


