HarmonyOS 鸿蒙Next @ObservedV2与PersistenceV2多层嵌套数组存储报错问题 @ObservedV2与PersistenceV2,关于定义的类如果存储的数据是多层嵌套数组,第一次不报错,重进应用的时候就会报错Error: Miss @Type in array defined in HarmonyOS 鸿蒙Next

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

HarmonyOS 鸿蒙Next @ObservedV2与PersistenceV2多层嵌套数组存储报错问题
@ObservedV2与PersistenceV2,关于定义的类如果存储的数据是多层嵌套数组,第一次不报错,重进应用的时候就会报错Error: Miss @Type in array defined in HarmonyOS 鸿蒙Next

定义的类

[@ObservedV2](/user/ObservedV2)
class  LinearGradient {
@Trace angle:string = '45deg'
@Trace direction?: GradientDirection
@Trace colors: Array<[string, number]> = [['#fff',0.0], ['#fff',1.0]]
}

更多关于HarmonyOS 鸿蒙Next @ObservedV2与PersistenceV2多层嵌套数组存储报错问题 @ObservedV2与PersistenceV2,关于定义的类如果存储的数据是多层嵌套数组,第一次不报错,重进应用的时候就会报错Error: Miss @Type in array defined in HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

对于复杂对象需要@Type修饰,确保序列化成功

// 数据中心
@ObservedV2
class SampleChild {
  @Trace p1: number = 0;
  p2: number = 10;
}

@ObservedV2
export class Sample {
  // 对于复杂对象需要@Type修饰,确保序列化成功
  @Type(SampleChild)
  @Trace f: SampleChild = new SampleChild();
}

更多关于HarmonyOS 鸿蒙Next @ObservedV2与PersistenceV2多层嵌套数组存储报错问题 @ObservedV2与PersistenceV2,关于定义的类如果存储的数据是多层嵌套数组,第一次不报错,重进应用的时候就会报错Error: Miss @Type in array defined in HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你这个回复白扯,你看我写的类,是复杂类型吗?,你告诉我[string, number]这种怎么用@Type装饰?,

@Type可装饰的类型:Object class以及Array、Date、Map、Set等内嵌类型。

参考文档是:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-new-type-V13

@ObservedV2
export class Sample {
  @Trace angle: string = '30age';
  @Trace direction?: GradientDirection
  [@Type](/user/Type)(Array)
  @Trace colors: Array<[string, number]> = [['#fff', 0.0], ['#fff', 1.0]];
}

你这种写法一样会报错,我早试过了,你有试过吗?

在HarmonyOS鸿蒙Next中,使用@ObservedV2@PersistenceV2注解处理多层嵌套数组时,若遇到“Error: Miss @Type in array defined”错误,通常是因为在嵌套数组中的某些元素类型未明确标注类型信息。

HarmonyOS要求所有持久化或观察的复杂数据类型(包括嵌套数组)必须明确指定其类型信息,以便在序列化和反序列化过程中正确解析。对于多层嵌套数组,需要确保每一层数组中的元素类型都使用了[@Type](/user/Type)注解来指明。

例如,如果你的嵌套数组定义如下:

@ObservedV2
@PersistenceV2
public class MyClass {
    public List<List<MyClassInner>> nestedArray;
}

public class MyClassInner {
    // 定义字段
}

需要确保MyClassInner也使用了[@Type](/user/Type)注解,并且所有数组层级都应正确标注。如果MyClassInner或任何数组层级的类型未标注,就会导致上述错误。

检查并确保所有嵌套层级都使用了[@Type](/user/Type)注解,通常可以解决此问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部