HarmonyOS 鸿蒙Next中用户首选项存储非基本类型的问题
HarmonyOS 鸿蒙Next中用户首选项存储非基本类型的问题 我要存进用户首选项的value,不是 string 等基本类型,而是 object
但是就发现,存进去容易,取出来难
我取出来之后,最难的就是转换类型!!!
因为取出来的东西,都没办法用类型判断,它就是 object 类型。我只能用 class-transformer 库进行处理。要写很多额外校验代码。
getAll 获取所有用户首选项,返回的还是 object,竟然不是数组!!!
唔,太难了
想问问大佬们,有没有简单的转换类型的方法?
在HarmonyOS Next中,用户首选项(Preferences)仅支持存储基本数据类型(字符串、数值、布尔值等),不支持直接存储对象或数组等非基本类型。若需存储复杂数据,需先将其序列化为字符串(如JSON格式)再存入,读取时反序列化还原数据。
更多关于HarmonyOS 鸿蒙Next中用户首选项存储非基本类型的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,用户首选项(Preferences)默认只支持存储基本数据类型(如string、number、boolean等)。当需要存储对象时,建议通过以下方式简化操作:
- 
序列化与反序列化: 
 存储前将对象转换为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;
- 
封装工具函数: 
 编写一个通用辅助函数,统一处理序列化和类型转换,减少重复代码。
- 
避免使用 getAll()直接操作对象:
 getAll()返回的是键值对对象,可通过Object.values()转换为数组,再结合map进行批量处理。
这种方法无需依赖第三方库,能更直接地控制类型转换逻辑。
 
        
       
                   
                   
                  

