#放码来战.端云一体化开发#HarmonyOS 5 【农民叔叔】10.【端侧工程】通过首选项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); //  保存用户信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿花粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值