HarmonyOS鸿蒙 Preference 数据存储:简单实用的本地存储方案

鸿蒙 Preference 数据存储:简单实用的本地存储方案

前言

在鸿蒙(HarmonyOS)应用开发中,经常需要保存一些简单的配置信息、用户偏好设置或临时数据。Preference 就是鸿蒙提供的一种轻量级键值对存储方案,它类似于 Android 的 SharedPreferences,操作简单,性能高效。

今天,我将通过一个简单的 Demo 来展示如何在鸿蒙应用中使用 Preference 进行数据存储。

一、什么是 Preference?

Preference 是鸿蒙 ArkData 模块提供的一种本地数据存储方式,它有以下特点:

  • 轻量级:适用于存储小量数据
  • 键值对存储:类似 Map 结构,简单易用
  • 线程安全:可以在多线程环境下使用
  • 数据类型丰富:支持字符串、数字、布尔值等

二、封装 Preference 工具类

为了简化使用,我们先封装一个工具类:

typescript 复制代码
// utils/PreferenceUtil.ets
import { preferences } from '@kit.ArkData';

export class PreferenceUtil {
  // 创建 Preference 实例
  private static myPref: preferences.Preferences = preferences.getPreferencesSync(
    AppStorage.get('Context'),
    { name: 'myPref' }
  );

  // 保存数据
  static save(key: string, value: string): boolean {
    try {
      PreferenceUtil.myPref.putSync(key, value);
      PreferenceUtil.myPref.flushSync();
      return true;
    } catch (error) {
      console.error('Save error:', error);
      return false;
    }
  }

  // 读取数据
  static load(key: string, defaultValue: string): preferences.ValueType {
    try {
      return PreferenceUtil.myPref.getSync(key, defaultValue);
    } catch (error) {
      console.error('Load error:', error);
      return defaultValue;
    }
  }
}

工具类说明:

  1. 单例模式:确保整个应用使用同一个 Preference 实例
  2. 同步操作 :使用 Sync 后缀的方法进行同步操作,简单直观
  3. 错误处理:捕获异常并返回默认值,保证程序稳定性

三、在页面中使用 Preference

下面是一个完整的页面示例,演示如何保存和读取数据:

typescript 复制代码
// pages/PreferencePage.ets
import { PreferenceUtil } from './utils/PreferenceUtil';

@Entry
@Component
struct PreferencePage {
  @State message: string = '点击按钮加载数据';

  // 保存数据
  private saveData() {
    const success = PreferenceUtil.save('key', 'HarmonyOS Preference Demo');
    this.message = success ? '数据保存成功!' : '保存失败!';
  }

  // 读取数据
  private loadData() {
    const value = PreferenceUtil.load('key', '默认值');
    this.message = `读取的值:${value}`;
  }

  build() {
    RelativeContainer() {
      // 显示消息的文本组件
      Text(this.message)
        .id('displayText')
        .fontSize(20)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          top: { anchor: '__container__', align: VerticalAlign.Top },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })

      // 保存按钮
      Button('保存数据')
        .id('saveButton')
        .width(150)
        .height(40)
        .alignRules({
          top: { anchor: 'displayText', align: VerticalAlign.Bottom },
          middle: { anchor: '__container__', align: HorizontalAlign.Center },
          bottom: { anchor: 'loadButton', align: VerticalAlign.Top }
        })
        .onClick(() => this.saveData())

      // 读取按钮
      Button('读取数据')
        .id('loadButton')
        .width(150)
        .height(40)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => this.loadData())
    }
    .height('100%')
    .width('100%')
    .padding(20)
  }
}

页面功能说明:

  • 点击"保存数据"按钮:将字符串保存到本地
  • 点击"读取数据"按钮:从本地读取并显示数据
  • 使用 @State 装饰器:实现数据与 UI 的自动绑定

四、运行效果

  1. 首次运行:点击"读取数据"显示"默认值"
  2. 保存数据后:点击"读取数据"显示"保存的数据"
  3. 重启应用:数据仍然存在,不会丢失

五、Preference 的常见使用场景

场景 数据示例 说明
用户设置 主题颜色、字体大小 保存用户的个性化设置
应用状态 首次启动标志、登录状态 记录应用运行状态
缓存数据 搜索历史、临时配置 临时存储,提升用户体验

六、注意事项

  1. 数据类型限制:Preference 主要存储简单数据类型,复杂对象需要序列化
  2. 存储容量:不适合存储大量数据,建议小于 1MB
  3. 性能考虑:频繁读写可能影响性能,建议批量操作

七、扩展功能(可选)

如果想支持更多数据类型,可以扩展工具类:

typescript 复制代码
// 扩展工具类
static saveBoolean(key: string, value: boolean): boolean {
  return this.save(key, value.toString());
}

static loadBoolean(key: string, defaultValue: boolean): boolean {
  const value = this.load(key, defaultValue.toString());
  return value === 'true';
}

// 保存对象(需要 JSON 序列化)
static saveObject(key: string, obj: Object): boolean {
  return this.save(key, JSON.stringify(obj));
}

static loadObject(key: string, defaultValue: Object): Object {
  const value = this.load(key, JSON.stringify(defaultValue));
  return JSON.parse(value as string);
}

总结

Preference 是鸿蒙应用开发中最简单的本地存储方案,适合存储小量的配置信息和用户偏好。通过封装工具类,我们可以更方便地在应用中使用它。

记住几个关键点:

  • 适合存储简单数据
  • 操作简单,性能良好
  • 注意异常处理和默认值设置

希望这个简单的 Demo 能帮助你快速上手鸿蒙的 Preference 存储功能!

相关推荐
黑鲨吃西瓜4 小时前
鸿蒙通用模块
harmonyos·鸿蒙
腾科IT教育10 小时前
HarmonyOS开发|ArkTS UI颜色API通用规则
ui·华为·harmonyos·harmonyos开发·鸿蒙应用开发工程师
风华圆舞15 小时前
HarmonyOS 自定义绘制实战 —— 用 ArkGraphics2D 画一个会卷曲翻动的页面网格
harmonyos·arkts·drawing·drawvertices·翻页卷曲·有限差分法线
风华圆舞17 小时前
HarmonyOS 手势与 animator 实战 —— 捏出跟手又有弹性的翻页物理
harmonyos·手势·pixelmap·pangesture·边界回弹·native 句柄
北墨NoLimit17 小时前
DevEco Code:在终端里用 AI 写鸿蒙应用
harmonyos
智塑未来18 小时前
打开快、切换顺、游戏稳:鸿蒙的日常流畅表现
游戏·华为·harmonyos
智塑未来1 天前
鸿蒙游戏体验手册:四种能力从性能到玩法逐一解锁
游戏·华为·harmonyos
math_hongfan1 天前
鸿蒙离线数据缓存高级架构:弱网预加载/离线数据优先级/同步冲突解决/上线后数据合并策略
学习·缓存·华为·架构·harmonyos·鸿蒙
math_hongfan2 天前
鸿蒙企业级数据存储高级架构:从读写分离到冷热数据分层/归档策略/数据生命周期管理最佳实践
人工智能·学习·华为·架构·harmonyos·鸿蒙
math_hongfan2 天前
鸿蒙存储异常高级排查:文件损坏检测/数据恢复/读写失败重试/磁盘空间预警系统性根治方案
学习·华为·harmonyos·鸿蒙