PersistenceV2 持久化数据的默认值 - HarmonyOS 鸿蒙Next
PersistenceV2 持久化数据的默认值 - HarmonyOS 鸿蒙Next
示例代码:
```typescript
import { PersistenceV2, Type } from '[@kit](/user/kit).ArkUI';
[@ObservedV2](/user/ObservedV2)
class SampleClass {
p1?: number = 0;
p2?: number = 0;
}
[@ObservedV2](/user/ObservedV2)
class FatherSampleClass {
[@Type](/user/Type)(SampleClass)
[@Trace](/user/Trace) f: SampleClass = new SampleClass();
}
[@Entry](/user/Entry)
[@ComponentV2](/user/ComponentV2)
export struct TestPersistenceV2 {
[@Local](/user/Local) v: FatherSampleClass = PersistenceV2.connect(FatherSampleClass, () => new FatherSampleClass())!;
build() {
Column() {
Text(`修改`)
.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)
}
}
问题1,添加[@Type](/user/Type)(SampleClass)
后涉及到的UI无法正常编译预览,报错
02-25 17:04:19.346 14757-356507 C03900/Ace E [Engine Log]Lifetime: 0.000000s
02-25 17:04:19.346 14757-356507 C03900/Ace E [Engine Log]Js-Engine: ark
02-25 17:04:19.346 14757-356507 C03900/Ace E [Engine Log]page: pages/main/test/TestPersistenceV2.js
02-25 17:04:19.346 14757-356507 C03900/Ace E [Engine Log]Error message: the requested module '[@ohos](/user/ohos):arkui.StateManagement' does not provide an export name 'Type' which imported by 'com.netease.lottery/hc_ui_business/ets/pages/main/test/TestPersistenceV2'
02-25 17:04:19.346 14757-356507 C03900/Ace E [Engine Log]Stacktrace:
02-25 17:04:19.346 14757-356507 C03900/Ace E [Engine Log] at func_main_0 (hc_ui_business/src/main/ets/pages/main/test/TestPersistenceV2.ets:12:10)
问题2,关于SampleClass类型写法问题,目前只有写法1可以在app重启时数据恢复正常,其他两种写法数据均无法正常恢复,请帮忙解释下原因,和PersistenceV2注意事项。
写法1——正确
[@ObservedV2](/user/ObservedV2)
class SampleClass {
p1?: number = 0;
p2?: number = 0;
}
写法2——错误
[@ObservedV2](/user/ObservedV2)
class SampleClass {
p1?: number = 0;
p2?: number = 0;
constructor(p1?: number, p2?: number) {
this.p1 = p1;
this.p2 = p2;
}
}
写法3——错误
[@ObservedV2](/user/ObservedV2)
class SampleClass {
p1?: number
p2?: number
}
更多关于PersistenceV2 持久化数据的默认值 - HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html
看见v2就头疼,这玩意版本有必要这么勤吗
更多关于PersistenceV2 持久化数据的默认值 - HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
也不好用啊,但业务逻辑嵌套复杂,只能用V2,V1更难用。
不过和Android Compose有点像,可以让AI帮着等价翻译,但细节好难用。
在HarmonyOS鸿蒙Next中,PersistenceV2是一个用于持久化数据存储的API。它允许开发者将数据存储在设备的本地存储中,以便在应用关闭或设备重启后仍然可以访问这些数据。PersistenceV2使用键值对的方式存储数据,并且支持多种数据类型,包括字符串、整数、布尔值等。
关于PersistenceV2的默认值,当使用get
方法从持久化存储中读取数据时,如果指定的键不存在,PersistenceV2会返回一个默认值。默认值的具体类型取决于你使用的get
方法的变体。例如:
getString(key: string, defValue: string): string
:如果键不存在,返回defValue
指定的字符串。getInt(key: string, defValue: number): number
:如果键不存在,返回defValue
指定的整数。getBoolean(key: string, defValue: boolean): boolean
:如果键不存在,返回defValue
指定的布尔值。
开发者在使用PersistenceV2时,可以通过指定defValue
参数来定义这些默认值。如果不指定defValue
,PersistenceV2会根据数据类型返回相应的默认值,例如空字符串""
、整数0
、布尔值false
等。
PersistenceV2的默认值机制确保了在读取数据时,即使键不存在,应用也不会因为空指针或未定义值而崩溃,从而提高了应用的健壮性。