前言:公司最近Android项目趋于运维状态,目前在跟架构组一起封装鸿蒙框架。今天先把首选项存储工具类整理出来,后续鸿蒙工具类在做补充。废话不多说上源码!!!
工具类源码如下:
TypeScript
import preferences from '@ohos.data.preferences'
/**
* @auther:jsxin
* email:[email protected]
* date: 2024/8/9
* desc: 首选项存储:key-value键值对增删改查
*/
class PreferencesUtils {
private preferences?: preferences.Preferences
/**
* 初始化Preferences对象(同步写法async/await)
* @param context 上线文
* @param preferenceName 首选项文件名称
*/
async initPreferences(context, preferencesName: string = 'preferences_data_store') {
console.debug('initPreferences() preferenceName = ' + preferencesName)
try {
this.preferences = await preferences.getPreferences(context, preferencesName)
} catch (err) {
console.debug('initPreferences() err.code = ' + err.code + ' err.message = ' + err.message)
}
}
/**
* 保存数据:key value键值对
* @param key 键
* @returns value 值
*/
async putValue(key: string, value: preferences.ValueType) {
if (!this.preferences) {
console.debug('Preferences--->>>[putValue] Preferences实例为空')
return
}
try {
await this.preferences.put(key, value)
await this.preferences.flush()
} catch (err) {
console.debug('Preferences--->>>[putValue]:err.code = ' + err.code + 'err.message = ' + err.message)
}
}
/**
* 根据key获得value
* @param key 键
* @returns value 值
*/
async getValue(key: string, defaultValue: preferences.ValueType = '') {
if (!this.preferences) {
console.debug('Preferences--->>>[getValue] Preferences实例为空')
return
}
//在typescript中,空字符串、数字0、null、undefined都被认为是false,其他值为true
if (!key) {
return defaultValue
}
try {
return await this.preferences.get(key, defaultValue)
} catch (err) {
console.debug('Preferences--->>>[getValue]:err.code = ' + err.code + 'err.message = ' + err.message)
}
}
/**
* 保存数据:key value键值对集合(多数据集合存储)
* @param valueMap 数据集合
*/
async putValueByMap(valueMap: Map<string, preferences.ValueType>) {
if (!this.preferences) {
console.debug('Preferences--->>>[putValueByMap] Preferences实例为空')
return
}
if (!valueMap || valueMap.size === 0) {
console.debug('Preferences--->>>[putValueByMap]:传入集合数据为空或未初始化')
return
}
try {
for (const entry of valueMap.entries()) {
const key = entry[0]
const value = entry[1]
await this.preferences.put(key, value)
}
this.preferences.flush()
} catch (err) {
console.debug('Preferences--->>>[putValueByMap]:err.code = ' + err.code + 'err.message = ' + err.message)
}
}
/**
* 根据key删除value
* @param key key
*/
async deleteByKey(key: string) {
if (!this.preferences) {
console.debug('Preferences--->>>[deleteByKey] Preferences实例为空')
return
}
try {
await this.preferences.delete(key)
await this.preferences.flush()
} catch (err) {
console.debug('Preferences--->>>[deleteByKey]:err.code = ' + err.code + 'err.message = ' + err.message)
}
}
/**
* 清空全部数据
*/
async deleteAllDatas() {
if (!this.preferences) {
console.debug('Preferences--->>>[deleteAllDatas] Preferences实例为空')
return
}
try {
await this.preferences.clear()
await this.preferences.flush()
} catch (err) {
console.debug('Preferences--->>>[deleteAllDatas]:err.code = ' + err.code + 'err.message = ' + err.message)
}
}
}
const preferencesUtils = new PreferencesUtils()
export default preferencesUtils as PreferencesUtils
用法:
1、推荐在EntryAbility中进行初始化,如下:
TypeScript
//1、导入依赖
import PreferencesUtils from '../store/PreferencesUtils'
export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
//2、全局初始化Preferences
PreferencesUtils.initPreferences(this.context.getApplicationContext())
}
2、在使用的界面进行引入,如下:
TypeScript
//1、包导入
import PreferencesUtils from '../store/PreferencesUtils'
@Entry
@Component
struct Index {
aboutToAppear(){
//2、使用
PreferencesUtils.putValue('name','张三')
}
如有问题或建议欢迎指正!