持久化数据的 API 调用 - HarmonyOS 鸿蒙Next

持久化数据的 API 调用 - HarmonyOS 鸿蒙Next 从AppStorage中访问PersistentStorage初始化的属性,使用方式是在PersistentStorage之后访问AppStorage中的属性

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-persiststorage-V5

但是不太清楚是调用逻辑还是其它问题,应用重启后,读取不到持久化的数据


更多关于持久化数据的 API 调用 - HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

1、可能是存储变量类型不符合,对象中的成员方法不支持持久化,不支持嵌套对象(对象数组,对象的属性是对象等)。因为目前框架无法检测AppStorage中嵌套对象(包括数组)值的变化,所以无法写回到PersistentStorage中。

2、PersistentStorage调用时机错误,PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后(即loadContent传入的回调被调用时)才可以被调用,早于该时机调用会导致持久化失败。

// EntryAbility.ets
onWindowStageCreate(windowStage: window.WindowStage): void {
  windowStage.loadContent('pages/Index', (err) => {
    if (err.code) {
      return;
    }
    PersistentStorage.persistProp('aProp', 47);
  });
}

或者使用Preferences 首选项进行存储

3、排查一下是否在程序中持久化了一个空的数据,即在需要持久化的数据还没有获取到的时候就对该数据进行持久化,导致持久化了一个空数据

更多关于持久化数据的 API 调用 - HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,持久化数据的API调用主要涉及使用分布式数据管理服务(Distributed Data Management,DDM)和本地数据存储服务。DDM支持跨设备的数据同步和共享,而本地数据存储服务则用于设备内部的数据持久化。

分布式数据管理服务(DDM):

  • DataShareHelper:用于跨设备的数据共享,提供数据的增删改查操作。
  • DataSharePredicates:用于构建查询条件,支持复杂的数据过滤。
  • DataShareResultSet:用于处理查询结果,支持对结果集进行遍历和操作。

本地数据存储服务:

  • Preferences:用于轻量级的数据存储,支持键值对形式的数据持久化。
  • Database:用于结构化数据的存储,支持SQLite数据库操作。
  • File:用于文件存储,支持文件的读写和管理。

示例代码:

// 使用Preferences进行数据存储
import preferences from '@ohos.data.preferences';

let preferences = preferences.getPreferences(this.context, 'myPreferences');
preferences.put('key', 'value').then(() => {
    preferences.flush();
});

// 使用Database进行数据存储
import relationalStore from '@ohos.data.relationalStore';

let store = await relationalStore.getRdbStore(this.context, {
    name: 'myDatabase.db',
    securityLevel: relationalStore.SecurityLevel.S1
});
await store.executeSql('CREATE TABLE IF NOT EXISTS myTable (id INTEGER PRIMARY KEY, name TEXT)');
await store.insert('myTable', { id: 1, name: 'sample' });

// 使用File进行数据存储
import fileio from '@ohos.fileio';

let filePath = this.context.filesDir + '/myFile.txt';
let fd = fileio.openSync(filePath, 0o102, 0o666);
fileio.writeSync(fd, 'Hello, HarmonyOS');
fileio.closeSync(fd);

这些API调用方法可以帮助开发者在HarmonyOS鸿蒙Next中实现数据的持久化存储和管理。

回到顶部