HarmonyOS 鸿蒙Next中怎么持续化数据,有哪些方法?

HarmonyOS 鸿蒙Next中怎么持续化数据,有哪些方法?

8 回复

【解决方案】

应用数据持久化请参考:应用数据持久化

更多关于HarmonyOS 鸿蒙Next中怎么持续化数据,有哪些方法?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


AppStorage:用于应用级别的状态管理,适用于需要在整个应用中共享的数据。
PersistentStorage:用于持久化存储数据,即使应用关闭后数据也不会丢失

Preferences 首选项 : 用户首选项为应用提供Key-Value键值型的数据存储能力,支持应用持久化轻量级数据,并对其进行增删除改查等。该存储对象中的数据会被缓存在内存中,因此它可以获得更快的存取速度。

Preferences与PersistentStorage的区别

PersistentStorage在UI之后,Preferences在UI之前

可以参考一下这个相关的文档:应用数据持久化概述-应用数据持久化-ArkData(方舟数据管理)-应用框架 - 华为HarmonyOS开发者

目前最常用的就是这三种:

cke_1272.png

一般的轻量数据都是使用首选项来处理

用户首选项(Preferences)—存储轻量级键值对数据,例如主题、字体

// 初始化首选项实例 
import { preferences } from '@kit.ArkData';
let options: preferences.Options = { 
  name: 'myStore', 
  storageType: preferences.StorageType.GSKV 
};
let dataPreferences = preferences.getPreferencesSync(context, options);

// 写入数据(同步到内存)
dataPreferences.putSync('theme', 'dark'); 
dataPreferences.flush(); // 持久化到文件 

// 读取数据
let theme = dataPreferences.getSync('theme', 'default');

键值型数据库(KV-Store)—分布式跨设备同步的非结构化数据(如商品价格)

// 创建数据库管理器 
import { distributedKVStore } from '@kit.ArkData';
let kvManager: distributedKVStore.KVManager;
kvManager = distributedKVStore.createKVManager({
  context: context,
  bundleId: 'com.example.demo'
});

// 打开数据库实例
let kvStore: distributedKVStore.SingleKVStore;
kvStore = kvManager.getKVStore('myKvStore', {
  createIfMissing: true
});

// 写入数据(支持异步操作)
kvStore.put('price', '99.9', (err) => {
  if (!err) console.info('Succeeded in putting data');
});

// 查询数据
kvStore.get('price', (err, data) => {
  if (!err) console.info(`Value:${data}`);
});

关系型数据库(RelationalStore)—复杂结构化数据(如订单记录、学生信息)

// 创建数据库表 
import { relationalStore } from '@kit.ArkData';
const STORE_CONFIG = { 
  name: 'RdbTest.db',
  securityLevel: relationalStore.SecurityLevel.S3 
};
let store: relationalStore.RdbStore;
relationalStore.getRdbStore(context, STORE_CONFIG, (err, rdbStore) => {
  store = rdbStore;
  store.executeSql('CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY, NAME TEXT)');
});

// 插入数据
store.insert('EMPLOYEE', { ID: 1, NAME: '张三' });

// 查询数据
store.query({ predicates: 'ID = ?' }, , (err, resultSet) => {
  if (resultSet.rowCount > 0) {
    resultSet.goToFirstRow(); 
    let name = resultSet.getString(resultSet.getColumnIndex('NAME'));
  }
});

文件系统—大文件(如图片、音视频)或自定义格式数据

// 写入文件
import { fileIo } from '@kit.ArkIO';
let path = context.filesDir + '/data.txt';
let text = 'Hello HarmonyOS';
fileIo.writeText(path, text, (err) => {
  if (!err) console.info('Write succeeded');
});

// 读取文件
fileIo.readText(path, (err, data) => {
  if (!err) console.info(`Content:${data}`);
});

PersistenceV2(UI状态持久化—自动保存/恢复界面状态(如列表滚动位置)

// 绑定持久化存储
import { PersistentStorage } from '@kit.ArkUI';
PersistentStorage.persistProp('scrollPos', 0); // 初始化默认值

// 组件中同步状态
@Entry
@Component
struct MyComponent {
  @StorageLink('scrollPos') scrollPos: number = 0;

  build() {
    List() {
      ForEach(this.items, (item) => {
        ListItem() {/*...*/}
      })
    }
    .onScroll((offset: number) => {
      this.scrollPos = offset; // 自动持久化
    })
  }
}

你好。

所谓的持久化数据,和在内存中的数据正好相反。

APP启动后,数据一直存在,退后重新进入,数据就清除了,这种就是内存中的数据。

而持久化数据,就是为了APP退出重新进入,还能拿到数据的场景,这也是为什么要做本地持久化数据。

一般持久化数据分为轻量级和重量级。

轻量级,可以放到首选项中进行持久化。类似于 Android SharedPreferences 和 iOS NSUserDefaults

重量级,就是放到本地沙箱下,或者数据库中。

鸿蒙Next中数据持久化方法主要有:

  1. 轻量级Preferences,用于存储键值对;
  2. 分布式数据对象DataObject,支持跨设备同步;
  3. 关系型数据库RDB,支持SQLite操作;
  4. 分布式数据库DistributedDB,实现多设备协同;
  5. 文件系统API,包括应用沙箱和公共目录访问。

Preferences适用于简单配置,RDB适合结构化数据,DistributedDB专为跨设备场景设计。

在HarmonyOS Next中,数据持久化主要有以下几种方法:

  1. 首选项(Preferences):适合存储简单的键值对数据,如应用配置信息。使用@ohos.data.preferences模块实现。

  2. 关系型数据库(Relational Database):基于SQLite,适合结构化数据存储。通过@ohos.data.relationalStore模块操作。

  3. 对象关系映射(ORM):通过@ohos.data.orm框架简化数据库操作。

  4. 分布式数据服务(Distributed Data Object):支持跨设备数据同步,使用@ohos.data.distributedData模块。

  5. 文件存储:通过@ohos.file.fs API进行文件读写,适合非结构化数据。

  6. 轻量级存储(Storage):类似Web的localStorage,使用@ohos.data.storage模块。

每种方法适用于不同场景,可根据数据量大小、结构复杂度、是否需要跨设备同步等需求选择。

回到顶部