HarmonyOS鸿蒙NEXT中通过首选项Preferences实现用户数据持久化
HarmonyOS鸿蒙NEXT中通过首选项Preferences实现用户数据持久化
通过手机号认证服务接口登录/注册成功返回的用户信息,我们通过Preferences首选项进行存储。
创建models目录,src>>main>>ets>>models,此目录下新建ArkTS 文件UserModel.ets,即用户信息实体类
/**
* 用户实体
*/
export default class UserModel {
/**
* 用户ID
*/
UId?:string;
/**
* 用户名
*/
Name?:string;
/**
* 手机号
*/
Phone?:string;
}
创建utils目录,src>>main>>ets>>utils,此目录下新建5个ArkTS 文件,分别如下:
定义常量类Constants.ets
export default class Constants {
/**
* 手机设备默认宽度
*/
static readonly DEVICE_DEFAULT_WIDTH: number = 360;
/**
* 首选项名(数据库名)
*/
static readonly PREFERENCE_NAME: string = 'dbName';
/**
* 用户信息表名
*/
static readonly TABLE_USER: string = 'tbUser';
/**
* 首选项操作类对象key值
*/
static readonly PREFERENCE_HANDLER: string = 'PreferencesHandler';
/**
* 隐私政策key值
*/
static readonly PRIVATE_FILE: string = 'PrivateFile';
}
全局上下文类GlobalContext.ets
/**
* 全局上下文
*/
export class GlobalContext {
private constructor() {}
private static instance: GlobalContext;
private objects = new Map<string, Object>();
/**
* 获取全局上下文
*/
public static getContext(): GlobalContext {
if (!GlobalContext.instance) {
GlobalContext.instance = new GlobalContext();
}
return GlobalContext.instance;
}
/**
* 获取对象
*/
getObject(name: string): Object | undefined {
return this.objects.get(name);
}
/**
* 设置对象
*/
setObject(key: string, objectClass: Object): void {
this.objects.set(key, objectClass);
}
}
首选项监听接口IPreferencesListener.ets
/**
* 首选项监听器
*/
export default interface IPreferencesListener {
/**
* 数据改变
*/
onDataChanged: (key: string) => void;
}
首选项操作类PreferencesHandler.ets
import data_preferences from '@ohos.data.preferences';
import { Constants } from './Constants';
import { IPreferencesListener } from './IPreferencesListener';
/**
* 存储首选项数据
*/
export default class PreferencesHandler {
//private listeners: IPreferencesListener[];
static instance: PreferencesHandler = new PreferencesHandler();
private preferences: data_preferences.Preferences | null = null;
private defaultValue: string = '';
private constructor() {
// this.listeners = new Array();
}
/**
* 配置首先项中数据表记录改变时监听
*/
public async configure(context: Context) {
this.preferences = await data_preferences.getPreferences(context, Constants.PREFERENCE_NAME);
// this.preferences.on('change', (data: Record<string, Object>) => {
// for (let pListener of this.listeners) {
// pListener.onDataChanged(data.key as string)
// }
// });
}
/**
* 读取数据
*/
public async get(key: string) {
let data: string = '';
if (this.preferences != null) {
data = await this.preferences.get(key, this.defaultValue) as string;
}
return data;
}
/**
* 保存数据
*/
public async set(key: string, value: string) {
if (this.preferences != null) {
await this.preferences.put(key, value);
await this.preferences.flush();
}
}
/**
* 添加监听
* @param listener
*/
public addListener(listener: IPreferencesListener) {
// this.listeners.push(listener);
}
}
用户控制器类UserController.ets
import { UserModel } from "../models/UserModel";
import { GlobalContext } from "./GlobalContext";
import { Constants } from "./Constants";
import { PreferencesHandler } from './PreferencesHandler'
export default class UserController {
static instant:UserController=new UserController();
/**
* 保存用户信息
* @param user
*/
public saveUser(user:UserModel){
// 首选项保存用户信息
let preference=GlobalContext.getContext().getObject(Constants.PREFERENCE_HANDLER) as PreferencesHandler;
preference.set(Constants.TABLE_USER,JSON.stringify(user));
}
}
登录按钮事件下auth.signIn()成功返回后,保存用户信息
// 登录成功
let user:AuthUser=result.getUser();
let uModel=new UserModel();
uModel.UId=user.getUid();
uModel.Name=user.getDisplayName();
uModel.Phone=user.getPhone();
this.userController.saveUser(uModel); // 保存用户信息
更多关于HarmonyOS鸿蒙NEXT中通过首选项Preferences实现用户数据持久化的实战教程也可以访问 https://www.itying.com/category-93-b0.html
请参见官方的技术文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-persistence-by-preferences
更多关于HarmonyOS鸿蒙NEXT中通过首选项Preferences实现用户数据持久化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS NEXT中,使用Preferences实现数据持久化的步骤如下:
- 获取Preferences实例:
let preferences = await dataPreferences.getPreferences(this.context, 'myprefs');
- 存储数据:
await preferences.put('key', 'value');
await preferences.flush();
- 读取数据:
let value = await preferences.get('key', 'default');
- 删除数据:
await preferences.delete('key');
- 清除所有数据:
await preferences.clear();
Preferences采用键值对存储,数据自动持久化到本地,适用于简单数据存储场景。使用时需在module.json5中声明所需权限。
在HarmonyOS NEXT中使用Preferences实现数据持久化的方案是可行的,但需要注意以下几点:
-
首选项适用于存储简单键值对数据,对于用户信息这类结构化数据,建议使用轻量级数据库(如RDB)更合适。
-
当前实现中PreferencesHandler的监听功能被注释掉了,如果需要监听数据变更,可以取消注释并实现IPreferencesListener接口。
-
建议对JSON序列化/反序列化增加异常处理,避免因数据格式问题导致应用崩溃。
-
对于敏感信息如手机号,建议考虑使用加密存储或使用系统提供的安全存储方案。
-
在保存用户信息时,建议增加数据校验逻辑,确保关键字段不为空。
整体代码结构清晰,分层合理,符合HarmonyOS应用开发规范。