HarmonyOS 鸿蒙Next 首选项无法读取Map类型的数据

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 首选项无法读取Map类型的数据
使用场景,在首选项中获取应用设置信息,调用数据类型Map报错,后来换成二维数组保存和获取数据均无问题。

数据类型定义如下:

export class UserBean {

// 用户登录成功后要保存的token

public token: string = ""

public persistence_username = ""

public fontSize: number = 1

public menuItemSwich:boolean[] = []

public turnOnMenuID: Map<string,boolean> = new Map()

public turnOnMenuID_1: Array<Array<string|boolean>> = []

}

调用代码如下:

console.log("turnOnMenuID:" + MyPreferencesUtil.getInstance().mUserInfo.turnOnMenuID.has("1"))

console.log("turnOnMenuID_1:" + MyPreferencesUtil.getInstance().mUserInfo.turnOnMenuID_1)

更多关于HarmonyOS 鸿蒙Next 首选项无法读取Map类型的数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

hasSync(key: string): boolean  检查key值是否是字符出

```
import dataPreferences from '@ohos.data.preferences';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Page5 {
  [@State](/user/State) message: string = 'Hello World';
  build() {
    Column(){
      Button('test')
        .onClick(()=>{
          this.getMapValue()
        })
    }
  }
  getMapValue() {
    let options: dataPreferences.Options = { name: 'myStore' };
    let preferences = dataPreferences.getPreferencesSync(getContext(this), options);
    let map: Map<string, boolean> = new Map()
    map.set("1", true)
    map.set("2", false)
    console.log("map1的值:"+map.get('1'))
    //插入map的值到首选项
    preferences.putSync('1', map.get('1'));
    //插入map的值到首选项
    let pre_map_value = preferences.getSync('1', 'default');
    console.log('首选项中key为1的值:'+pre_map_value)
    if (preferences.hasSync('1')) {
      console.info("The key 'startup' is contained.");
    }
  }
}
```<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next 首选项无法读取Map类型的数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,如果首选项(Preferences)无法直接读取Map类型的数据,这通常是因为Preferences API本身不直接支持Map类型的存储。Preferences主要用于存储简单的键值对数据,如字符串、整数、浮点数和布尔值等。

为了解决这个问题,你可以采取以下几种方法:

  1. 序列化:将Map对象序列化为字符串或字节数组后存储,读取时再反序列化回Map对象。这可以使用JSON或XML等序列化格式。

  2. 拆分存储:将Map中的每个键值对作为独立的条目存储在Preferences中,使用特定的前缀或分隔符来区分键。例如,可以将键“map_key1”存储为Map中键“key1”的值。

  3. 使用其他存储方式:考虑使用文件存储、数据库(如SQLite)或内容提供者等更适合存储复杂数据结构的方式。

  4. 检查API文档:确认HarmonyOS是否有提供其他更适合存储复杂数据结构的API或组件。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部