HarmonyOS开发实战:小分享-AppPreferences 实现收藏数据持久化

前言

数据持久化是移动应用的基础能力,让用户数据在应用重启后不丢失。HarmonyOS 提供了@ohos.data.preferences实现轻量级键值存储。本篇讲解如何将收藏数据持久化。详细 API 可参考 HarmonyOS Preferences 官方文档。

一、Preferences 基本用法

1.1 获取 Preferences 实例

import { preferences } from '@ohos.data.preferences'; import { BusinessError } from '@ohos.base'; let dataPreferences: preferences.Preferences | null = null; async function getPreferences(context: Context): Promise<void> { try { dataPreferences = await preferences.getPreferences(context, 'favorites_store'); } catch (err) { let code = (err as BusinessError).code; console.error('Failed to get preferences, code: ' + code); } }

1.2 写入数据

async function saveFavorites(items: Array<FavoriteItem>): Promise<void> { if (!dataPreferences) return; try { await dataPreferences.put('favorites', JSON.stringify(items)); await dataPreferences.flush(); } catch (err) { console.error('Failed to save favorites, code: ' + (err as BusinessError).code); } }

1.3 读取数据

async function loadFavorites(): Promise<Array<FavoriteItem>> { if (!dataPreferences) return []; try { const jsonStr = await dataPreferences.get('favorites', '[]'); return JSON.parse(jsonStr) as Array<FavoriteItem>; } catch (err) { console.error('Failed to load favorites, code: ' + (err as BusinessError).code); return []; } }

二、在 FavoritesPage 中集成

2.1 集成代码

@Entry @Component struct FavoritesPage { @State favorites: Array<FavoriteItem> = []; async aboutToAppear(): Promise<void> { await getPreferences(this.context); this.favorites = await loadFavorites(); } async onFavoriteChanged(): Promise<void> { await saveFavorites(this.favorites); } }

三、Preferences API 总结

API作用说明
getPreferences(context, name)获取实例异步
put(key, value)写入支持 string/number/boolean
get(key, defaultValue)读取指定默认值
delete(key)删除删除指定键
flush()持久化写入磁盘
clear()清空删除所有键

四、本文核心知识点

4.1 数据持久化核心要点

  1. Preferences 轻量级键值存储
  2. put 写入,get 读取,flush 持久化
  3. JSON.stringify/parse 序列化复杂对象

4.2 实战开发要点

  • 所有操作用 try/catch 包裹
  • 写入后调用 flush() 确保落盘
  • 复杂对象序列化存储

附录:Preferences 数据持久化的完整实现细节

1. Preferences 完整 API

API作用异步
getPreferences(context, name)获取实例
put(key, value)写入数据
get(key, defaultValue)读取数据
delete(key)删除键
flush()持久化到磁盘
clear()清空所有数据
on('change', cb)监听变化

2. 完整的使用示例

import { preferences } from '@ohos.data.preferences'; import { BusinessError } from '@ohos.base'; async function saveData(context: Context, key: string, value: string): Promise<void> { try { let prefs = await preferences.getPreferences(context, 'my_store'); await prefs.put(key, value); await prefs.flush(); } catch (err) { console.error('Save failed: ' + JSON.stringify(err)); } } async function loadData(context: Context, key: string): Promise<string> { try { let prefs = await preferences.getPreferences(context, 'my_store'); return await prefs.get(key, ''); } catch (err) { console.error('Load failed: ' + JSON.stringify(err)); return ''; } }

3. 序列化复杂对象

// 保存对象 async function saveObject(context: Context, key: string, obj: Object): Promise<void> { const json = JSON.stringify(obj); await saveData(context, key, json); } // 读取对象 async function loadObject<T>(context: Context, key: string): Promise<T | null> { const json = await loadData(context, key); if (!json) return null; return JSON.parse(json) as T; }

4. 与 RDB 对比

对比维度PreferencesRDB
数据结构键值对关系表
查询能力仅 key 查询SQL 查询
数据量少量大量
复杂度简单复杂
适用场景设置、配置历史记录

5. 完整代码文件索引

文件路径说明
pages/FavoritesPage.ets收藏数据持久化
common/utils/Storage.ets存储工具类

6. 实现要点总结

Preferences 核心要点:

  1. getPreferences获取存储实例
  2. put/get读写数据
  3. flush()确保数据落盘
  4. JSON.stringify/parse序列化复杂对象
  5. try/catch异常处理

7. 总结

本文详细讲解了 HarmonyOS Preferences 数据持久化的完整实现,涵盖 API 使用、序列化、异常处理等核心知识点。

完整代码索引

文件路径说明
本文涉及的代码文件见正文

核心 API 参考

API/组件用途文档链接
文中涉及的 API核心功能华为官方文档

常见问题

Q1: 为什么会出现编译错误?A: 检查 import 路径是否正确,确认 API 版本兼容性。

Q2: 如何调试功能?A: 使用 hilog 打印日志,检查参数传递是否正确。

Q3: 运行时崩溃怎么办?A: 使用 try/catch 捕获异常,检查权限配置。

性能优化建议

  1. 异步操作使用 async/await 避免阻塞 UI
  2. 大量数据使用 LazyForEach 懒加载
  3. 图片资源压缩后再使用
  4. 缓存网络请求结果
  5. 及时释放不再使用的资源

安全注意事项

  1. 用户输入必须校验
  2. 敏感数据不要硬编码
  3. 网络请求使用 HTTPS
  4. 文件路径避免注入
  5. 权限最小化原则

扩展阅读

  • HarmonyOS 官方文档提供了更详细的 API 说明
  • 开源鸿蒙社区有丰富的示例代码
  • 华为开发者论坛可以获取技术支持

总结

本文详细讲解了小分享 App 中对应功能的完整实现,涵盖 API 使用、代码示例、常见问题、性能优化等核心知识点。通过本文的学习,读者可以掌握 HarmonyOS 开发的完整流程。

本章小结

本文详细介绍了小分享 App 中对应功能的完整实现方案。通过本文的学习,读者可以掌握以下核心知识点:

  1. 功能的核心 API 使用方法和注意事项
  2. 完整的代码实现流程和最佳实践
  3. 常见问题的排查和解决方案
  4. 性能优化和安全建议

掌握这些知识后,读者可以独立实现类似功能,并应用到自己的 HarmonyOS 应用开发中。

练习与思考

  1. 尝试修改代码中的参数,观察对功能的影响
  2. 思考如何将本功能与其他功能组合使用
  3. 考虑如何优化代码性能和用户体验
  4. 探索华为官方文档中更多高级用法

实践是掌握技术的最佳途径,建议读者在理解代码后自行编写和调试。

完整代码文件索引

文件路径说明
本文涉及的所有代码文件见正文

核心 API 参考

API/组件用途文档链接
本文涉及的核心 API功能实现华为官方文档

常见问题排查

Q1: 编译错误A: 检查 import 路径是否正确,确认 API 版本兼容性,查看 hilog 日志。

Q2: 运行时异常A: 使用 try/catch 捕获异常,检查参数合法性,确认权限已配置。

Q3: 性能问题A: 避免在主线程执行耗时操作,使用异步 API,及时释放资源。

最佳实践总结

  1. 代码结构清晰,职责单一
  2. 错误处理完善,用户体验良好
  3. 性能优化到位,运行流畅
  4. 安全防护周全,数据可靠
  5. 文档注释完整,易于维护

总结

本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践,并能够独立实现类似功能。

  • 敬请期待

总结

本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践,并能够独立实现类似功能。在实际开发中,建议读者结合官方文档深入理解每个 API 的参数含义和适用场景,并在项目中灵活运用。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!