HarmonyOS 鸿蒙Next PersistentStorage和preferences存储问题

HarmonyOS 鸿蒙Next PersistentStorage和preferences存储问题

import preferences from '@ohos.data.preferences'

export default class EntryAbility extends UIAbility {
  testPersistent() {

    function set<T>(key: string, value: T) {
      PersistentStorage.PersistProp<T>(key, value)
      AppStorage.Set<T>(key, value)
    }

    function get<T>(key: string, defaultValue: T): T {
      PersistentStorage.PersistProp<T>(key, defaultValue)
      return AppStorage.Get<T>(key)
    }

    let key = "bbbb"
    hilog.info(0x0000, 'testTag', '%{public}s', `key bbbb -> ${get(key, 0)}`);
    set(key, 1)
    hilog.info(0x0000, 'testTag', '%{public}s', `key bbbb -> ${get(key, 0)}`);
    set(key, 2)
    hilog.info(0x0000, 'testTag', '%{public}s', `key bbbb -> ${get(key, 0)}`);
    set(key, 3)
    hilog.info(0x0000, 'testTag', '%{public}s', `key bbbb -> ${get(key, 0)}`);
  }

  async testPreference() {
    let preference = await preferences.getPreferences(this.context, PersistentUtil.spName)
    let key = "aaaa"
    let aaa = await preference.get(key, 0)
    hilog.info(0x0000, 'testTag', '%{public}s', `key aaaa -> ${aaa}`);
    preference.put(key, 1)
    aaa = await preference.get(key, 0)
    hilog.info(0x0000, 'testTag', '%{public}s', `key aaaa -> ${aaa}`);
    preference.put(key, 2)
    aaa = await preference.get(key, 0)
    hilog.info(0x0000, 'testTag', '%{public}s', `key aaaa -> ${aaa}`);
    preference.put(key, 3)
    aaa = await preference.get(key, 0)
    hilog.info(0x0000, 'testTag', '%{public}s', `key aaaa -> ${aaa}`);
  }

  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    this.testPersistent()
    this.testPreference()
  }
}

尝试了用PersistentStorage和preferences,发现都是退出app重新打开后数据不见了。

手机是荣耀30,系统是鸿蒙4.0,app是api9。

求助大佬们。应该要怎么写的。。只想用安卓的SharePreference那样的功能而已。。

结果是这样的:


更多关于HarmonyOS 鸿蒙Next PersistentStorage和preferences存储问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

看看这里勾选了没

image.png

更多关于HarmonyOS 鸿蒙Next PersistentStorage和preferences存储问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


勾了的。。现在用了preferences,放弃PersistentStorage了,

大佬, 这个页面要怎么进入, 没找到入口,

这个页面是从哪点出来的, 我也出现了数据已经存储的丢失问题, 启动几次之前保存的数据就丢失了,

preferences的原来是我少调了flush()

加上flush()之后就好了。

PersistentStorage的还是不懂哪里错了。。。

我尝试了多个位置调用PersistentStorage.PersistProp()方法,发现只有这样

PersistentStorage.PersistProp({ key : ** , defaultValue: ** })

放在@Entry @Component结构的类中才可以有效果,放在entryAbility顶层调用或者方法内调用都是不行的。

本来想在 entryAbilityonCreate 中调用,发现不行,

在HarmonyOS(鸿蒙Next)中,PersistentStoragePreferences是两种不同的数据存储机制,适用于不同的场景。

  1. PersistentStorage

    • PersistentStorage是鸿蒙Next提供的一种持久化存储方案,适用于需要长期保存且数据量较大的场景。
    • 它基于文件系统,支持存储复杂的数据结构,如对象、数组等。
    • 数据存储路径为应用沙盒内的PersistentStorage目录,数据在应用卸载时会自动清除。
    • 使用PersistentStorage时,开发者需要通过context.persistentStorageDir获取存储路径,然后使用文件操作API进行数据的读写。
  2. Preferences

    • Preferences是鸿蒙Next提供的一种轻量级键值对存储方案,适用于存储简单的配置信息或用户偏好设置。
    • 它基于键值对的形式存储数据,支持基本数据类型(如字符串、整数、布尔值等)。
    • 数据存储路径为应用沙盒内的Preferences目录,数据在应用卸载时会自动清除。
    • 使用Preferences时,开发者可以通过DataAbilityHelperPreferences API进行数据的读写。

两者的主要区别在于存储的数据类型和使用场景。PersistentStorage适合存储复杂数据,而Preferences适合存储简单的键值对数据。开发者应根据具体需求选择合适的存储方案。

回到顶部