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/方法/头 → 请求 → 关闭。importhttpfromohos.net.http// 在页面或异步方法中consthttpRequesthttp.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.responseCode200){constresultJSON.parse(data.resultasstring)// 更新 State驱动 UI 刷新}httpRequest.destroy()})要点回调在子线程执行若要在回调里更新State、刷新 UI需要封装成runOnUIThread或使用异步封装见下务必 destroy请求完成后调用httpRequest.destroy()避免泄漏超时connectTimeout、readTimeout按需设置单位毫秒在 UI 线程中更新结果ArkTS 中 UI 只能在主线程更新而 http 回调可能在工作线程因此需要把「结果处理 状态更新」抛回主线程import{runOnUIThread}fromkit/ArkUI// 在 request 的回调里if(data.responseCode200){constlistJSON.parse(data.resultasstring)runOnUIThread((){this.listDatalist// this 指向 ComponentlistData 为 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改为key1value1key2value2等形式。封装为 Promise可选为避免回调嵌套、便于在 async 函数里使用可对 request 做一层 Promise 封装functionrequestT(url:string,options:http.HttpRequestOptions):PromiseT{constreqhttp.createHttp()returnnewPromise((resolve,reject){req.request(url,options,(err,data){req.destroy()if(err){reject(err)return}if(data.responseCode200data.responseCode300){try{resolve(JSON.parse(data.resultasstring)asT)}catch(e){reject(e)}}else{reject(newError(HTTP${data.responseCode}))}})})}在页面里await requestRespType(url, opts)得到结果后再在runOnUIThread里赋给State即可。数据持久化Preferences 轻量键值存储ohos.data.preferences适用于配置项、简单键值对数据以文件形式存在应用沙箱内。获取与读写importdataPreferencesfromohos.data.preferencesimport{common}fromkit.AbilityKit// 在 EntryAbility 或异步上下文中constcontextgetContext(this)ascommon.UIAbilityContextconststoreawaitdataPreferences.getPreferences(context,my_prefs)// 写awaitstore.put(token,xxx)awaitstore.put(userId,100)awaitstore.flush()// 读consttokenawaitstore.get(token,)constuserIdawaitstore.get(userId,0)注意getPreferences为异步需在 async 函数或 Promise 中调用写入后建议调用flush()保证落盘键为 string值为 string | number | boolean 等基础类型在页面中的用法在aboutToAppear()里异步getPreferences并get结果赋给State在用户操作如登录成功时putflush即可实现「打开应用读缓存、操作后写缓存」。关系型数据库RDB简要需要本地表结构、查询条件时可使用关系型数据库。流程一般为获取 RdbStore → 建表若不存在→ insert/update/query/delete。获取 RdbStoreimportrelationalStorefromohos.data.relationalStoreconstconfig:relationalStore.StoreConfig{name:app.db,securityLevel:relationalStore.SecurityLevel.S1}conststoreawaitrelationalStore.getRdbStore(context,config)建表与插入constsqlCreateCREATE 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)查询constpredicatesnewrelationalStore.RdbPredicates(user)predicates.equalTo(age,20)constresultSetawaitstore.query(predicates,[id,name,age])while(resultSet.goToNextRow()){constidresultSet.getLong(resultSet.getColumnIndex(id))constnameresultSet.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 应用的数据与持久化场景。

相关新闻

Docker 高级应用指南:企业级容器化实践

Docker 高级应用指南:企业级容器化实践

目录引言一、多阶段构建 (Multi-stage Builds)1.1 Go 应用多阶段构建示例1.2 Node.js 应用多阶段构建二、Docker Compose 高级特性2.1 环境变量管理2.2 覆盖配置三、安全强化与最佳实践3.1 安全扫描3.2 Docker 安全配置3.3 运行时安全配置四、CI/CD 集成4.1 GitHub Actions 示例…

2026/7/4 18:38:57 阅读更多 →
Docker 基础入门教程:容器化技术完全指南

Docker 基础入门教程:容器化技术完全指南

目录 引言一、Docker 概述与核心概念核心组件:与传统虚拟机的区别: 二、Docker 安装与环境准备2.1 安装 Docker2.2 验证安装 三、Docker 基础命令详解3.1 镜像管理命令3.2 容器管理命令 四、Dockerfile 详解与最佳实践4.1 基本语法4.2 重要指令说明4.3 构…

2026/7/3 0:49:14 阅读更多 →
187.三段式状态机的第二段组合always块逻辑要用阻塞赋值=,不能用<=会出bug

187.三段式状态机的第二段组合always块逻辑要用阻塞赋值=,不能用<=会出bug

状态机有时会随机的出现乱跳的情况,需要特别注意。卡死,乱跳等

2026/7/3 14:27:52 阅读更多 →

最新新闻

AI规模化落地:从概念验证到生产环境的实践指南

AI规模化落地:从概念验证到生产环境的实践指南

1. 从概念验证到规模化落地的鸿沟 在过去的五年里,我作为AI解决方案架构师参与了超过20家企业的人工智能转型项目。一个令人警醒的数据是:根据Gartner统计,约85%的AI试点项目最终未能实现规模化部署。这个数字背后反映的正是我们今天要探讨的…

2026/7/4 18:33:20 阅读更多 →
STM32F303VE与TC78H653FTG驱动有刷电机方案解析

STM32F303VE与TC78H653FTG驱动有刷电机方案解析

1. 为什么选择TC78H653FTGSTM32F303VE组合驱动有刷电机在工业控制和消费电子领域,直流有刷电机因其结构简单、成本低廉、控制方便等优势,至今仍占据重要地位。但要让这种"古老"的电机发挥出现代化性能,驱动电路和控制器选型尤为关键…

2026/7/4 18:31:20 阅读更多 →
零基础网络渗透学习指南:从TCP/IP到实战靶场的完整路径

零基础网络渗透学习指南:从TCP/IP到实战靶场的完整路径

1. 从零到一:网络渗透学习的本质与心态重塑“零基础入门网络渗透到底要怎么学?” 这个问题背后,是无数对网络安全充满好奇,却又被其神秘感和庞杂知识体系吓退的新手最真实的困惑。我见过太多人,一上来就直奔Kali Linux…

2026/7/4 18:29:19 阅读更多 →
AI开发者工作流选型指南:GLM-5、Kimi、MiniMax等6大模型实战对比

AI开发者工作流选型指南:GLM-5、Kimi、MiniMax等6大模型实战对比

1. 这不是模型对比,是开发者工作流的生存指南 你有没有过这种体验:凌晨两点,手机弹出一条短信——“您的API调用额度已超限,当前计费周期剩余余额:0.37”。你猛坐起来,手抖着打开监控面板,发现一…

2026/7/4 18:29:19 阅读更多 →
Si4732与PIC18F86K90在嵌入式音频系统中的应用与优化

Si4732与PIC18F86K90在嵌入式音频系统中的应用与优化

1. 项目背景与核心组件解析在数字音频处理领域,Si4732和PIC18F86K90的组合堪称黄金搭档。作为一名长期从事嵌入式音频系统开发的工程师,我亲身体验过这对组合带来的音质飞跃。Si4732是Silicon Labs推出的高性能数字调谐收音芯片,而PIC18F86K9…

2026/7/4 18:29:19 阅读更多 →
AD74413R与STM32F303RC硬件设计与SPI通信实现

AD74413R与STM32F303RC硬件设计与SPI通信实现

1. AD74413R与STM32F303RC的硬件协同设计AD74413R是一款四通道软件可配置输入/输出器件,每个通道可独立配置为ADC输入、DAC输出、数字输入或数字输出模式。与STM32F303RC搭配使用时,需要特别注意两者的电气特性和接口匹配。1.1 硬件连接要点SPI接口应采用…

2026/7/4 18:23:18 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻