当前位置: 首页 > news >正文

HarmonyOS 网络请求与数据持久化

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

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

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

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

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


文章目录

  • HarmonyOS 网络请求与数据持久化
    • 前言
    • 网络请求
      • 使用 http 模块发 GET 请求
      • 在 UI 线程中更新结果
      • POST 与请求体
      • 封装为 Promise(可选)
    • 数据持久化
      • Preferences 轻量键值存储
      • 关系型数据库(RDB)简要
    • 总结

HarmonyOS 网络请求与数据持久化

前言

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

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

网络请求

使用 http 模块发 GET 请求

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

importhttpfrom'@ohos.net.http'// 在页面或异步方法中consthttpRequest=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){constresult=JSON.parse(data.resultasstring)// 更新 @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){constlist=JSON.parse(data.resultasstring)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>{constreq=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.resultasstring)asT)}catch(e){reject(e)}}else{reject(newError(`HTTP${data.responseCode}`))}})})}

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

数据持久化

Preferences 轻量键值存储

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

获取与读写:

importdataPreferencesfrom'@ohos.data.preferences'import{common}from'@kit.AbilityKit'// 在 EntryAbility 或异步上下文中constcontext=getContext(this)ascommon.UIAbilityContextconststore=awaitdataPreferences.getPreferences(context,'my_prefs')// 写awaitstore.put('token','xxx')awaitstore.put('userId',100)awaitstore.flush()// 读consttoken=awaitstore.get('token','')constuserId=awaitstore.get('userId',0)

注意:

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

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

关系型数据库(RDB)简要

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

获取 RdbStore:

importrelationalStorefrom'@ohos.data.relationalStore'constconfig:relationalStore.StoreConfig={name:'app.db',securityLevel:relationalStore.SecurityLevel.S1}conststore=awaitrelationalStore.getRdbStore(context,config)

建表与插入:

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

查询:

constpredicates=newrelationalStore.RdbPredicates('user')predicates.equalTo('age',20)constresultSet=awaitstore.query(predicates,['id','name','age'])while(resultSet.goToNextRow()){constid=resultSet.getLong(resultSet.getColumnIndex('id'))constname=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 应用的数据与持久化场景。

http://www.jsqmd.com/news/344028/

相关文章:

  • 实时估值服务
  • Python 初级入门教程:从零开始掌握编程基础
  • 2026必看!数控加工中心机床厂家直销,附数控加工中心机床厂家哪家好+数控加工中心机床厂家推荐,采购避坑指南 - 栗子测评
  • 龙门加工中心生产厂家/高速钻攻机生产厂家/五轴加工中心生产厂家哪家好?2026三大品类生产厂家TOP6权威盘点 - 栗子测评
  • Docker 基础入门教程:容器化技术完全指南
  • 2026年高性价比厚板柔性折弯中心供应商深度评估 - 2026年企业推荐榜
  • 华为HCCDA-AI人工智能入门级开发者题库(带详细解析)
  • 非标定制复合机床厂家哪家好?2026年权威榜单:非标定制复合机床生产厂家/数控车铣复合机床厂家TOP推荐 - 栗子测评
  • 2026必藏:免费AI搜索优化监测工具,GEO优化少走弯路
  • 通过云服务 快速体验 TDengine
  • 《Netcode框架灵活与性能协同设计指南》
  • Apptio:智能自动化规模化需要财务严谨性
  • 187.三段式状态机的第二段组合always块逻辑要用阻塞赋值=,不能用<=会出bug
  • WPS2023专业增强版-v12.1.0.23542-精简无用组件和功能 最小内存和磁盘空间占用,文档秒开
  • Soul 开源实时数字人模型,0.87s 亚秒级延时;DeepL 发布 Voice API,支持实时语音到语音翻译丨日报
  • 意大利比萨大学:让AI神经网络高效处理信息的新技术ParalESN
  • 听完冬姐的武汉“扫楼”复盘,我才真正看懂:中小企业的数据,为什么最需要松鼠备份
  • libarchive: 一个几乎可以解压所有压缩文件的C语言库
  • AI图像检测器“视觉盲区“:中科院揭示现有技术如何被轻松“欺骗“
  • 2026年评价高的二手集装箱转让热门推荐榜 - 行业平台推荐
  • Firefox浏览器新增AI功能但可选择关闭
  • 2026年热门的二手集装箱出售客户信赖推荐 - 行业平台推荐
  • 崇岸大学团队揭秘:AI评审员到底可不可靠?
  • 超越ChatGPT:知识图谱如何让大模型更聪明、更可靠(必藏指南)
  • 纯技术干货:多卡种兼容读卡器(DAIC-MJ-RW)通用性说明及对接数据格式+二次开发数据协议SDK。通用性:多奥门禁控制器/考勤机/智能通道门禁控制器/消费机/在线巡更读头/梯控主板/电子班牌/等
  • 加州大学欧文分校发明“内部监控器“:让大模型自己识别胡说八道
  • 谷歌联合医疗机构启动全国性AI虚拟医疗随机对照研究
  • 云成本清算:CIO们的云计算成本困境
  • 让多图对话AI不再“搞混“:首尔多所大学发现分隔符背后的秘密
  • 2026石笼网防护网源头厂商甄选:格宾石笼网生产厂家+格宾网源头厂家+镀锌格宾网厂家合集 - 栗子测评