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
请确认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
适用于存储小量的、非结构化的数据,不适合存储大量或复杂的数据。