HarmonyOS 鸿蒙Next @ohos.data.preferences 使用咨询

HarmonyOS 鸿蒙Next @ohos.data.preferences 使用咨询

【设备信息】 Mate60
【API版本】 Api12
【DevEco Studio版本】 5.0.3.700
【问题描述】 项目中使用 preferences 存放用户登录信息,putSync 断点值是传进去了,但是 getSync 拿出来是空白,这是哪里出了错

【问题代码】

import preferences from '[@ohos](/user/ohos).data.preferences';
import { PreferencesConstants } from '../constants/PreferencesConstants';

/**
 * 项目全局存储,使用ohos.data.preferences
 */
const defaultPreferenceName = "HS_PREFERENCES"

export class PreferUtil {
  static getStore() {
    const context = AppStorage.get<Context>(PreferencesConstants.KEY_CONTEXT_ABILITY)
    return preferences.getPreferencesSync(context, {
      name: defaultPreferenceName
    })
  }

  static put(key: string, value: preferences.ValueType) {
    const store = PreferUtil.getStore()
    store.putSync(key, value)
    store.flush()
  }

  static get(key: string, defaultValue: preferences.ValueType) {
    const store = PreferUtil.getStore()
    return store.getSync(key, defaultValue)
  }

  static delete(key: string) {
    const store = PreferUtil.getStore()
    store.deleteSync(key)
    store.flush()
  }

  /**
   * 操作用户token
   * 使用频率较高,单独方法
   */
  static saveToken(token: string) {
    PreferUtil.put(PreferencesConstants.KEY_TOKEN, token)
  }

  static getToken() {
    return PreferUtil.get(PreferencesConstants.KEY_TOKEN, '') as string
  }
}

更多关于HarmonyOS 鸿蒙Next @ohos.data.preferences 使用咨询的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

请确认saveToken与getToken时的context是否相同,context不同时,获取到是不同是首选项实例,可能导致获取为空。

另外如果涉及到多进程场景,一个进程读一个进程写,由于两个进程的内存是不共享的,直接get是从内存拿的值,所以此时需要先清掉进程缓存,再重新读文件,即先removePreferencesFromCache,再getPreferences。

关于preferences保存数据关闭后再去获取为空的问题,IDE每次run项目(执行的命令都是先卸载当前推的hap包,再把要run的项目的hap包推上去),应用都会被卸载,其在设备上产生的数据库文件及临时文件也会被移除。 如果需要保存数据,可以在Run–>Edit Configuration -->General–>Installation Options–>中勾选‘Keep Application Data’。

更多关于HarmonyOS 鸿蒙Next @ohos.data.preferences 使用咨询的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,@ohos.data.preferences 是一个用于轻量级数据存储的模块,主要用于保存应用的配置信息或用户偏好设置。该模块提供了键值对的存储方式,支持数据类型包括字符串、数字、布尔值等。

使用 @ohos.data.preferences 时,首先需要通过 getPreferences 方法获取一个 Preferences 对象,然后可以使用 put 方法存储数据,使用 get 方法读取数据。数据存储后,可以通过 flush 方法将数据持久化到文件中。

以下是一个简单的示例代码:

import dataPreferences from '@ohos.data.preferences';

let preferences = null;

async function initPreferences() {
  preferences = await dataPreferences.getPreferences(this.context, 'myPreferences');
}

async function saveData(key: string, value: dataPreferences.ValueType) {
  await preferences.put(key, value);
  await preferences.flush();
}

async function getData(key: string, defaultValue: dataPreferences.ValueType) {
  return await preferences.get(key, defaultValue);
}

initPreferences 函数中,初始化了一个 Preferences 对象,saveData 函数用于存储数据,getData 函数用于读取数据。flush 方法确保数据被写入到持久化存储中。

需要注意的是,@ohos.data.preferences 适用于存储小量的、非结构化的数据,不适合存储大量或复杂的数据。

回到顶部