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
看看这里勾选了没
更多关于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顶层调用或者方法内调用都是不行的。
本来想在 entryAbility
的 onCreate
中调用,发现不行,
在HarmonyOS(鸿蒙Next)中,PersistentStorage
和Preferences
是两种不同的数据存储机制,适用于不同的场景。
-
PersistentStorage:
PersistentStorage
是鸿蒙Next提供的一种持久化存储方案,适用于需要长期保存且数据量较大的场景。- 它基于文件系统,支持存储复杂的数据结构,如对象、数组等。
- 数据存储路径为应用沙盒内的
PersistentStorage
目录,数据在应用卸载时会自动清除。 - 使用
PersistentStorage
时,开发者需要通过context.persistentStorageDir
获取存储路径,然后使用文件操作API进行数据的读写。
-
Preferences:
Preferences
是鸿蒙Next提供的一种轻量级键值对存储方案,适用于存储简单的配置信息或用户偏好设置。- 它基于键值对的形式存储数据,支持基本数据类型(如字符串、整数、布尔值等)。
- 数据存储路径为应用沙盒内的
Preferences
目录,数据在应用卸载时会自动清除。 - 使用
Preferences
时,开发者可以通过DataAbilityHelper
或Preferences
API进行数据的读写。
两者的主要区别在于存储的数据类型和使用场景。PersistentStorage
适合存储复杂数据,而Preferences
适合存储简单的键值对数据。开发者应根据具体需求选择合适的存储方案。