1、PreferenceUtil
import { preferences } from '@kit.ArkData'
import { JSONUtil } from '@pura/harmony-utils'
import { UserModel } from '../mvi/data/UserModel'
import { Constants } from './Constants'
/**
* @author J.query
* @date 2024/10/12 8:48
* @email j-query@foxmail.com
* Description:
*/
class PreferenceUtil {
// 首选项实例
private pref: preferences.Preferences | null = null
/*
* 初始化preferences实例
* @context 应用上下文
*/
async loadPreference(context: Context) {
try {
this.pref = await preferences.getPreferences(context, Constants.SPSETCOOKIE)
console.log(`preferences[${Constants.SPSETCOOKIE}]初始化成功`)
} catch (err) {
console.error(`preferences[${Constants.SPSETCOOKIE}]初始化失败`)
console.error('err: ', JSON.stringify(err))
}
}
/*
* 销毁preferences实例 - 缓存、持久化文件一并销毁
* @context 应用上下文
*/
async delPreference(context: Context) {
try {
await preferences.deletePreferences(context, Constants.SPSETCOOKIE)
console.log(`preferences[${Constants.SPSETCOOKIE}]销毁成功`)
} catch (err) {
console.error(`preferences[${Constants.SPSETCOOKIE}]销毁失败`)
console.error('err: ', JSON.stringify(err))
}
}
/*
* 从preferences实例中获取键对应的值
* @key 健
* @defaultValue 获取失败时,返回的值
*/
async getPreferenceValue(key: string, defaultValue: preferences.ValueType): Promise<preferences.ValueType> {
let value: preferences.ValueType = defaultValue
// 获取对应的值之前,先判断preferences是否初始化完成
if (!this.pref) {
console.error(`preferences[${Constants.SPSETCOOKIE}]尚未初始化!`)
return value
}
try {
value = await this.pref.get(key, defaultValue)
console.log(`读取preferences[${key} = ${value}]成功`)
} catch (err) {
console.error(`读取preferences[${key}]失败 `, JSON.stringify(err))
}
return value
}
/**
* 保存用户信息
* @param mUserModel
* @param isSave
*/
saveUser(mUserModel: UserModel, isSave: boolean) {
if (mUserModel && isSave) {
this.pref?.putSync(Constants.KEY_USER_INFO, JSON.stringify(mUserModel, undefined, undefined));
} else {
this.pref?.deleteSync(Constants.KEY_USER_INFO);
}
this.pref?.flush();
}
// @State myUser: UserModel = null
getUser(): UserModel | undefined {
try {
if (!this.pref) {
return undefined;
}
let json = this.pref.getSync(Constants.KEY_USER_INFO, "");
if (json === null || json === undefined) {
return undefined;
}
// 尝试将 json 转换为 UserModel
// const user: UserModel = json as UserModel;
const user = JSON.parse(json.toString()) as UserModel;
// const user = JSONUtil.jsonToBean(UserModel, json);
// 额外检查 user 是否符合 UserModel 的结构
if (typeof user !== 'object' || user === null) {
return undefined;
}
return user;
} catch (error) {
console.error('Error in getUser:', error);
return undefined;
}
}
/**
* 保存记住密码状态
* @param isSave
* @returns
*/
setRememberPswStatusToFile(isSave: boolean) {
return this.pref?.putSync(Constants.SpRememberPswStatus, isSave)
}
/**
* 获取记住密码状态
* @return Boolean
*/
getRememberPswStatusToFile(): boolean {
return this.pref?.getSync(Constants.SpRememberPswStatus, []) as boolean
}
/*
* 从Preferences实例中写入数据
* @key 健
* @value 值
*/
async putPreferenceValue(key: string, value: preferences.ValueType) {
// 写入数据之前,先判断preferences是否初始化完成
if (!this.pref) {
console.error(`preferences[${Constants.SPSETCOOKIE}]尚未初始化!`)
return
}
try {
await this.pref.put(key, value)
// 持久化
await this.pref.flush()
console.log(`保存preferences[${key} = ${value}]成功`)
} catch (err) {
console.error(`保存preferences[${key} = ${value}]失败`, JSON.stringify(err))
}
}
/**
* 保存用户信息
* @param user
*/
putUser(user?: UserModel) {
if (user) {
this.pref?.putSync(Constants.KEY_USER_INFO, JSON.stringify(user, undefined, undefined));
} else {
this.pref?.deleteSync(Constants.KEY_USER_INFO);
}
this.pref?.flush();
}
/**
* 获取搜索历史
* @returns
*/
getSearchHistory(): string[] {
return this.pref?.getSync(Constants.KEY_SEARCH_HISTORY, []) as string[];
}
/**
* 保存搜索历史
* @param historyKeys
*/
putSearchHistory(historyKeys: string[]) {
this.pref?.putSync(Constants.KEY_SEARCH_HISTORY, historyKeys)
this.pref?.flush()
}
}
2、使用示例
const preferenceUtil = new PreferenceUtil()
export default preferenceUtil as PreferenceUtil


29万+

被折叠的 条评论
为什么被折叠?



