HarmonyOS 网络请求与数据持久化

HarmonyOS 网络请求与数据持久化
在这里插入图片描述

网罗开发(小红书、快手、视频号同名)

大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!

文章目录

HarmonyOS 网络请求与数据持久化

前言

HarmonyOS 应用开发中,网络请求和数据持久化是两类最常用的能力:前者用于拉取服务端数据,后者用于在本地缓存用户数据、配置等。ArkTS 侧通过 @ohos.net.http@ohos.request 等模块发请求,通过 @ohos.data.preferences、关系型数据库等做持久化。

本文只讲这两块的核心 API 和典型用法,并给出关键代码与注意点,不贴完整 Demo。

网络请求

使用 http 模块发 GET 请求

@ohos.net.http 提供 createHttp(),得到 httpRequest 对象后可发起请求。典型流程:创建 → 设置 URL/方法/头 → 请求 → 关闭。

import http from'@ohos.net.http'// 在页面或异步方法中const httpRequest = http.createHttp() httpRequest.request('https://api.example.com/list',{ method: http.RequestMethod.GET, header:{'Content-Type':'application/json'}, connectTimeout:60000, readTimeout:60000},(err, data)=>{if(err){console.error('请求失败', err)return}if(data.responseCode ===200){const result =JSON.parse(data.result asstring)// 更新 @State,驱动 UI 刷新} httpRequest.destroy()})

要点:

  • 回调在子线程执行:若要在回调里更新 @State、刷新 UI,需要封装成 runOnUIThread 或使用异步封装(见下)
  • 务必 destroy:请求完成后调用 httpRequest.destroy(),避免泄漏
  • 超时connectTimeoutreadTimeout 按需设置,单位毫秒

在 UI 线程中更新结果

ArkTS 中 UI 只能在主线程更新,而 http 回调可能在工作线程,因此需要把「结果处理 + 状态更新」抛回主线程:

import{ runOnUIThread }from'@kit/ArkUI'// 在 request 的回调里if(data.responseCode ===200){const list =JSON.parse(data.result asstring)runOnUIThread(()=>{this.listData = list // this 指向 @Component,listData 为 @State})}

这样 this.listData 的变更会在主线程执行,触发界面刷新。

POST 与请求体

POST 请求只需把 method 改为 http.RequestMethod.POST,并在 extraData 里传 body 字符串:

httpRequest.request('https://api.example.com/submit',{ method: http.RequestMethod.POST, header:{'Content-Type':'application/json'}, extraData:JSON.stringify({ name:'test', id:1}), connectTimeout:60000, readTimeout:60000},(err, data)=>{// 同上,err/data 处理 + destroy})

服务端若要求表单编码,则 Content-Type 改为 application/x-www-form-urlencodedextraData 改为 key1=value1&key2=value2 等形式。

封装为 Promise(可选)

为避免回调嵌套、便于在 async 函数里使用,可对 request 做一层 Promise 封装:

functionrequest<T>(url:string, options: http.HttpRequestOptions):Promise<T>{const req = http.createHttp()returnnewPromise((resolve, reject)=>{ req.request(url, options,(err, data)=>{ req.destroy()if(err){reject(err)return}if(data.responseCode >=200&& data.responseCode <300){try{resolve(JSON.parse(data.result asstring)asT)}catch(e){reject(e)}}else{reject(newError(`HTTP ${data.responseCode}`))}})})}

在页面里 await request<RespType>(url, opts) 得到结果后,再在 runOnUIThread 里赋给 @State 即可。

数据持久化

Preferences 轻量键值存储

@ohos.data.preferences 适用于配置项、简单键值对,数据以文件形式存在应用沙箱内。

获取与读写:

import dataPreferences from'@ohos.data.preferences'import{ common }from'@kit.AbilityKit'// 在 EntryAbility 或异步上下文中const context =getContext(this)as common.UIAbilityContext const store =await dataPreferences.getPreferences(context,'my_prefs')// 写await store.put('token','xxx')await store.put('userId',100)await store.flush()// 读const token =await store.get('token','')const userId =await store.get('userId',0)

注意:

  • getPreferences 为异步,需在 async 函数或 Promise 中调用
  • 写入后建议调用 flush() 保证落盘
  • 键为 string,值为 string | number | boolean 等基础类型

在页面中的用法:aboutToAppear() 里异步 getPreferencesget,结果赋给 @State;在用户操作(如登录成功)时 put + flush,即可实现「打开应用读缓存、操作后写缓存」。

关系型数据库(RDB)简要

需要本地表结构、查询条件时,可使用关系型数据库。流程一般为:获取 RdbStore → 建表(若不存在)→ insert/update/query/delete。

获取 RdbStore:

import relationalStore from'@ohos.data.relationalStore'const config: relationalStore.StoreConfig ={ name:'app.db', securityLevel: relationalStore.SecurityLevel.S1}const store =await relationalStore.getRdbStore(context, config)

建表与插入:

const sqlCreate =` CREATE TABLE IF NOT EXISTS user ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER ) `await store.executeSql(sqlCreate)const valueBucket: relationalStore.ValuesBucket ={ name:'张三', age:20}await store.insert('user', valueBucket)

查询:

const predicates =newrelationalStore.RdbPredicates('user') predicates.equalTo('age',20)const resultSet =await store.query(predicates,['id','name','age'])while(resultSet.goToNextRow()){const id = resultSet.getLong(resultSet.getColumnIndex('id'))const name = resultSet.getString(resultSet.getColumnIndex('name'))// 使用 id, name...} resultSet.close()

RDB 适合列表、草稿、离线缓存等结构化数据;简单配置仍建议用 Preferences,两者可搭配使用。

总结

  • 网络http.createHttp() 发请求,回调中注意线程(用 runOnUIThread 更新 UI)和及时 destroy;可按需封装为 Promise。
  • 持久化:配置/简单键值用 dataPreferences.getPreferences 的 put/get + flush;结构化数据用 RDB 建表 + insert/query。

把「请求 → 解析 → 主线程更新 @State」和「启动读 Preferences/RDB、操作后写回」串起来,即可覆盖大部分 HarmonyOS 应用的数据与持久化场景。

Read more

OpenClaw 快速上手: 从0到1 完整教程 (Clawdbot)—— 2026 革命性的开源个人AI智能体(Personal AI Agent)

OpenClaw 快速上手:从 0 到 1 完整技术教程 前言:什么是OpenClaw? OpenClaw是一款革命性的开源个人AI智能体(Personal AI Agent),它代表了人工智能助手领域的一次重大突破。与传统的云端AI助手不同,OpenClaw采用本地优先(Local-first)架构,所有数据和处理都在用户自有设备上完成,确保了绝对的隐私安全。这款工具的核心优势在于其系统级执行能力和全渠道交互特性,用户可以通过Telegram、WhatsApp、iMessage等日常聊天工具下达指令,AI助手则能够自动完成文件整理、代码部署、日程同步等复杂任务。 OpenClaw最初名为Clawdbot,由开发者@steipete创建,自发布以来迅速在技术社区引起轰动。截至2026年1月,该项目在GitHub上的星标数已突破4万,支持Windows、Mac、Linux及云服务器多平台部署。它的设计理念是让AI助手真正成为用户的数字同事,具备24/7全天候工作能力,能够主动处理各种任务,而不仅仅是被动响应指令。 文章目录 * OpenClaw 快速上手:从 0 到 1

By Ne0inhk
央妈推荐!2026年AI提效实战宝典《AI提效手册》深度解读与资源分享

央妈推荐!2026年AI提效实战宝典《AI提效手册》深度解读与资源分享

大家好,最近在人工智能工具应用领域,一本由人民邮电出版社出版的新书《AI提效手册》受到了广泛关注,并获得了权威媒体的推荐。 作为一名常年关注效率工具的技术爱好者,我第一时间对其内容进行了研读。这本书旨在为普通用户提供一站式的AI工具实战指南,特别聚焦于目前市面上主流的五款应用。 本文将为大家梳理该手册的核心内容与实用价值。手册核心内容概览这本《AI提效手册》是一本面向大众的实操性指南,它系统性地整合了以下五款热门AI工具的教学: * 豆包:侧重于智能对话与各类文本内容的创作。 * 即梦:专注于图像生成与平面设计方面的辅助。 * 剪映:讲解其在视频剪辑流程中集成的AI赋能功能。 * 飞书:探讨如何利用其智能特性提升办公与团队协作效率。 * 扣子:服务于编程开发场景的效率提升工具。 内容亮点与特色该书之所以值得推荐,在于其极强的实战性和丰富的学习资源,具体体现在: 1. 案例驱动,场景丰富:书中提供了超过100个实战案例,覆盖了工作汇报、学习笔记与生活规划等多个核心场景,便于读者即学即用。 2. 提示词(Prompt)模板库:附有1000余条开箱即用的提示词模板,能

By Ne0inhk

如何借助AI完成测试用例的生成?实测高效落地指南

作为一名测试从业者,想必你也有过这样的困扰:重复编写常规功能的测试用例,耗时又耗力;面对复杂业务逻辑,容易遗漏边缘场景;需求频繁迭代时,用例更新跟不上节奏,常常陷入“加班写用例、熬夜改用例”的内耗里。 而现在,生成式AI的爆发的已经彻底改变了测试用例生成的传统模式——它能快速批量生成用例、覆盖更多人工易忽略的场景,还能适配需求迭代快速更新,将测试人员从重复劳动中解放出来,转向更核心的质量策略设计。但很多人尝试后却反馈:“把需求丢给AI,生成的用例驴唇不对马嘴”“看似全面,实际很多无法执行”。 其实,AI生成测试用例的核心不是“输入→输出”的简单操作,而是“人机协同”的高效配合:AI负责规模化生产,人负责搭建框架、把控质量。今天就结合我的实测经验,手把手教你如何借助AI高效生成测试用例,避开常见坑,真正实现提效不内耗。 一、先搞懂:AI生成测试用例的底层逻辑(避免踩错第一步) 很多人用不好AI的核心原因,是误以为AI能“读懂所有需求”,其实它的本质是“基于已有规则和数据,模仿人类测试思维生成用例”。其底层主要依赖三大技术,

By Ne0inhk
2026 毕业论文 AI 大横评我把 8 款主流工具,从“开题到交稿”完整跑了一遍

2026 毕业论文 AI 大横评我把 8 款主流工具,从“开题到交稿”完整跑了一遍

2026 年再看论文 AI,我基本确认了一件事: 90% 的工具,只能帮你“写几段话”; 能真正把论文“做完”的,非常少。 这次我不看宣传、不看名气,只做一件事: 👉 把一篇论文,从 0 跑到“可提交状态”。 统一评测流程👇 选题 → 大纲 → 正文 → 引用 → 格式 → 导出 并且给每款工具打分(满分 100): 维度 权重 论文结构能力 25 学术严谨性 20 文献 & 引用 20 格式与排版 20 实用完成度 15 🥇 第一名|雷小兔(总分:92 / 100) 定位:

By Ne0inhk