HarmonyOS 鸿蒙Next中用户首选项存储非基本类型的问题

HarmonyOS 鸿蒙Next中用户首选项存储非基本类型的问题 我要存进用户首选项的value,不是 string 等基本类型,而是 object

但是就发现,存进去容易,取出来难

我取出来之后,最难的就是转换类型!!!

因为取出来的东西,都没办法用类型判断,它就是 object 类型。我只能用 class-transformer 库进行处理。要写很多额外校验代码。

getAll 获取所有用户首选项,返回的还是 object,竟然不是数组!!!

唔,太难了

想问问大佬们,有没有简单的转换类型的方法?

2 回复

在HarmonyOS Next中,用户首选项(Preferences)仅支持存储基本数据类型(字符串、数值、布尔值等),不支持直接存储对象或数组等非基本类型。若需存储复杂数据,需先将其序列化为字符串(如JSON格式)再存入,读取时反序列化还原数据。

更多关于HarmonyOS 鸿蒙Next中用户首选项存储非基本类型的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,用户首选项(Preferences)默认只支持存储基本数据类型(如string、number、boolean等)。当需要存储对象时,建议通过以下方式简化操作:

  1. 序列化与反序列化
    存储前将对象转换为JSON字符串(JSON.stringify()),读取时再解析为对象(JSON.parse())。这样可以利用TypeScript的类型断言或泛型来简化类型转换,例如:

    const user = { name: "Alice", age: 30 };
    await preferences.put('key', JSON.stringify(user));
    const data = JSON.parse(await preferences.get('key')) as User;
    
  2. 封装工具函数
    编写一个通用辅助函数,统一处理序列化和类型转换,减少重复代码。

  3. 避免使用getAll()直接操作对象
    getAll()返回的是键值对对象,可通过Object.values()转换为数组,再结合map进行批量处理。

这种方法无需依赖第三方库,能更直接地控制类型转换逻辑。

回到顶部