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

3 回复

看见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的默认值机制确保了在读取数据时,即使键不存在,应用也不会因为空指针或未定义值而崩溃,从而提高了应用的健壮性。

回到顶部