直接跳到内容

本地存储数据源

介绍

本地存储数据源模块(datastore)用于保存 Token、账号密码等简单数据。它基于 core/util 的 PreferencesUtil 实现,通过 repository 对外提供数据访问能力。

数据源接口示例

文件位置:foundation/datastore/src/main/ets/datasource/token/TokenStoreDataSource.ets

ts
/**
 * @file Token 本地存储数据源接口
 */
export interface TokenStoreDataSource {
  /**
   * 保存 Token
   */
  setToken(token: string): Promise<void>;

  /**
   * 读取 Token
   */
  getToken(): Promise<string>;

  /**
   * 清除 Token
   */
  clearToken(): Promise<void>;
}

数据源实现示例

文件位置:foundation/datastore/src/main/ets/datasource/token/TokenStoreDataSourceImpl.ets

ts
import common from "@ohos.app.ability.common";
import preferences from "@ohos.data.preferences";
import { ContextUtil, PreferencesUtil } from "@core/util";
import { TokenStoreDataSource } from "./TokenStoreDataSource";

/**
 * @file Token 本地存储数据源实现
 */
export class TokenStoreDataSourceImpl implements TokenStoreDataSource {
  private prefs: PreferencesUtil;
  private static readonly PREFS_NAME: string = "token_store";
  private static readonly KEY_TOKEN: string = "token";

  constructor(context?: common.Context) {
    const resolvedContext = context ?? ContextUtil.getUIAbilityCtx();
    this.prefs = new PreferencesUtil(resolvedContext, TokenStoreDataSourceImpl.PREFS_NAME);
  }

  async setToken(token: string): Promise<void> {
    await this.prefs.set(TokenStoreDataSourceImpl.KEY_TOKEN, token);
  }

  async getToken(): Promise<string> {
    const value = await this.prefs.get(TokenStoreDataSourceImpl.KEY_TOKEN, "");
    return typeof value === "string" ? value : "";
  }

  async clearToken(): Promise<void> {
    await this.prefs.remove(TokenStoreDataSourceImpl.KEY_TOKEN);
  }
}

账号存储示例

文件位置:foundation/datastore/src/main/ets/datasource/account/AccountStoreDataSource.ets

ts
/**
 * @file 账号本地存储数据源接口
 */
export interface AccountStoreDataSource {
  /**
   * 保存账号
   */
  saveAccount(account: string): Promise<void>;

  /**
   * 读取账号
   */
  loadAccount(): Promise<string>;

  /**
   * 保存密码
   */
  savePassword(password: string): Promise<void>;

  /**
   * 读取密码
   */
  loadPassword(): Promise<string>;

  /**
   * 清除账号信息
   */
  clear(): Promise<void>;
}

如何新增本地存储

  1. foundation/datastore/src/main/ets/datasource/ 下新增业务文件夹。
  2. 编写数据源接口,定义读写方法。
  3. 编写数据源实现,使用 PreferencesUtil 操作数据。
  4. Index.ets 中导出接口与实现。
  5. 在 repository 中使用该数据源。

注意事项

  • 本地存储模块不直接给业务层使用,业务通过 repository 访问。
  • 每个业务使用独立的 Preferences 文件(通过 PREFS_NAME 区分)。
  • 敏感数据(如密码)建议加密后存储。