HarmonyOS 鸿蒙Next:请教一下为什么设置了PersistentStorage,每次打开还是初始化的值?

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:请教一下为什么设置了PersistentStorage,每次打开还是初始化的值?

请教一下为什么设置了PersistentStorage,每次打开还是初始化的值,每次打开取到的 sysset 都是 0,有人知道吗?

下面是ets代码:

import bundle from '@ohos.bundle';

storageInit();

@Entry
@Component
struct Splash {
  @StorageLink('sysset') sysset: number = 0; //1:看过
onPageShow() {  //生命周期 3
  WindowManager.setLayoutFullScreen(false, WindowManager.COLOR_WHITE,WindowManager.COLOR_BLACK, WindowManager.COLOR_WHITE, WindowManager.COLOR_BLACK);

  if (this.sysset == 0) {
    this.dialogController.open(); // 弹窗
  }
}
dialogController : CustomDialogController = new CustomDialogController({ // 通过CustomDialogController初始化弹窗属性
  builder: DialogExample({action: this.onAccept}), // 绑定弹窗属性
  cancel: this.existApp,
  autoCancel: true
});

onAccept() {
  this.sysset+= 1;
}
//定义一些持久化缓存的数据
function storageInit() {
  PersistentStorage.PersistProp('sysset', 0);  //1:看过
}

更多关于HarmonyOS 鸿蒙Next:请教一下为什么设置了PersistentStorage,每次打开还是初始化的值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

18 回复

楼主这个问题解决了吗,勾选keep application data之后还是不行

更多关于HarmonyOS 鸿蒙Next:请教一下为什么设置了PersistentStorage,每次打开还是初始化的值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Run -> Edite Configurations -> installation Options -> Keep Application Data

勾选这一项,会保留上次缓存的值

不然每次启动app等于重新安装,之前缓存的值会被清除掉

按照这样设置后,我这边的缓存数据重新安装不会被清除了,感谢大佬,

我的设置了依旧会被清除呢…

勾选keep application data 管用,逛论坛发现细节

运行这句话的时候:this.sysset+= 1; 提示:undefined

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

也就是说,此时的this不是page,是dialog了,因为dialog里没有sysset这个变量。你可以试改为用首选项数据库,我之前做隐私协议Dialog显示时,就是用首选项来控制隐私协议对话框,如果同意了,就不再显示。

应该是这个原因,弹出窗的this不是sysset的,同一个页面,不能使用这个设计太不合理了。

你好,你之前做的隐私协议Dialog显示,用数据库方式,有没有例子参考一下,谢谢。

你的代码这里,只是想设置某个页面为全屏吗?如果整个项目都是全屏显示,应该是在EntryAbility.ets文件里设置全屏配置。而不是页面每次显示时,都要设置为全屏显示。

WindowManager.setLayoutFullScreen(false, WindowManager.COLOR_WHITE,WindowManager.COLOR_BLACK, WindowManager.COLOR_WHITE, WindowManager.COLOR_BLACK);

嗯,谢谢。我之前都加了。

是不是在弹出的窗体中去调用下面这个没用? 有没有什么办法可以。

this.sysset+= 1;

你这个onAccept() 函数是在什么时候调用的?

当点击“查看”按钮时,会调用onAccept()函数,但似乎没有保存数据,每次打开都显示为0。

当点击“查看”按钮时,会调用onAccept()函数,但似乎没有保存数据,每次打开都显示为0。

你给的代码,点击查看后,调用的是this.action()函数吧?不应该是this.onAccept()吗

因为在上面已经绑定过了,所以点击时会触发调用的。

builder: DialogExample({action: this.onAccept}),

针对你提到的HarmonyOS(鸿蒙)Next系统中设置了PersistentStorage但每次打开都是初始化值的问题,可能的原因及解决方向如下:

  1. 存储路径或权限问题:检查PersistentStorage的设置路径是否正确,以及应用是否拥有对该路径的读写权限。路径错误或权限不足都可能导致数据无法正确保存。

  2. 数据同步问题:如果系统或应用有数据同步机制,确认同步是否成功执行。有时数据可能因同步失败而未能持久化。

  3. 存储引擎或框架问题:检查PersistentStorage使用的存储引擎或框架是否存在已知问题或限制,特别是在鸿蒙系统的特定版本中。

  4. 代码逻辑错误:重新审视设置和读取PersistentStorage的代码逻辑,确保在设置数据后没有立即被覆盖或重置,且在读取时正确引用了存储位置。

  5. 系统或应用重启行为:确认系统或应用在重启后是否有清理缓存或重置存储的行为,这可能会影响PersistentStorage的数据持久性。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部