引言在移动应用开发中网络请求与数据持久化是两块最基础的基石。无论是社交媒体、新闻阅读还是即时通讯都离不开从服务器获取数据并将重要信息缓存到本地。HarmonyOS为开发者提供了丰富的API通过ohos.net.http模块发起HTTP请求利用ohos.data.relationalStore或ohos.data.preferences实现数据持久化。本文将结合一个新闻列表缓存应用带你深入掌握这两项关键技术所有代码均可直接运行。核心概念速览在HarmonyOS ArkTS开发中涉及网络请求与数据持久化的常用模块如下网络请求模块ohos.net.http基于Promise封装支持GET、POST等多种方法可设置请求头、超时时间等。关系型数据库ohos.data.relationalStore提供SQLite数据库能力适合存储结构化数据支持增删改查、事务操作。用户首选项ohos.data.preferences以键值对形式存储轻量配置数据如用户设置比数据库更轻便但无法应对复杂查询。本实战采用关系型数据库因为它更贴近真实业务场景。实战示例新闻列表离线缓存App我们将构建一个简单的新闻列表页面具备以下功能1. 打开App时自动从网络获取最新新闻2. 拿到数据后存入本地数据库3. 当网络异常如断网时自动展示数据库中的历史缓存保证用户始终能看到内容。1. 权限与依赖配置首先在module.json5中声明网络访问权限{ module: { requestPermissions: [ { name: ohos.permission.INTERNET } ] } }导入所需模块代码中将使用import http from ohos.net.http; import relationalStore from ohos.data.relationalStore; import { BusinessError } from ohos.base;2. 数据模型与数据库初始化定义新闻实体类class NewsItem { title: string source: string publishTime: string content: string }在页面的aboutToAppear生命周期中初始化数据库创建存储表async initDatabase(): PromiserelationalStore.RdbStore { const STORE_CONFIG: relationalStore.StoreConfig { name: news.db, securityLevel: relationalStore.SecurityLevel.S1 }; const SQL_CREATE_TABLE CREATE TABLE IF NOT EXISTS news ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, source TEXT, publishTime TEXT, content TEXT ); let store await relationalStore.getRdbStore(getContext(this), STORE_CONFIG); await store.executeSql(SQL_CREATE_TABLE); return store; }3. 网络请求实现发起GET请求并解析JSON数据为NewsItem数组。注意使用try-catch捕获异常并在结束后销毁httpRequest对象typescriptasync fetchNewsFromNetwork(): Promise {let httpRequest http.createHttp();let response await httpRequest.request(https://api.example.com/news, // 替换为真实接口{method: http.RequestMethod.GET,header: { Content-Type: application/json },readTimeout: 5000,connectTimeout: 5000});// 假设返回格式为 { code: 200, data: [...] }let result JSON.parse(response.result as string);let data: Array [];if (result.code
HarmonyOS开发实战:网络请求与数据持久化完全指南
引言在移动应用开发中网络请求与数据持久化是两块最基础的基石。无论是社交媒体、新闻阅读还是即时通讯都离不开从服务器获取数据并将重要信息缓存到本地。HarmonyOS为开发者提供了丰富的API通过ohos.net.http模块发起HTTP请求利用ohos.data.relationalStore或ohos.data.preferences实现数据持久化。本文将结合一个新闻列表缓存应用带你深入掌握这两项关键技术所有代码均可直接运行。核心概念速览在HarmonyOS ArkTS开发中涉及网络请求与数据持久化的常用模块如下网络请求模块ohos.net.http基于Promise封装支持GET、POST等多种方法可设置请求头、超时时间等。关系型数据库ohos.data.relationalStore提供SQLite数据库能力适合存储结构化数据支持增删改查、事务操作。用户首选项ohos.data.preferences以键值对形式存储轻量配置数据如用户设置比数据库更轻便但无法应对复杂查询。本实战采用关系型数据库因为它更贴近真实业务场景。实战示例新闻列表离线缓存App我们将构建一个简单的新闻列表页面具备以下功能1. 打开App时自动从网络获取最新新闻2. 拿到数据后存入本地数据库3. 当网络异常如断网时自动展示数据库中的历史缓存保证用户始终能看到内容。1. 权限与依赖配置首先在module.json5中声明网络访问权限{ module: { requestPermissions: [ { name: ohos.permission.INTERNET } ] } }导入所需模块代码中将使用import http from ohos.net.http; import relationalStore from ohos.data.relationalStore; import { BusinessError } from ohos.base;2. 数据模型与数据库初始化定义新闻实体类class NewsItem { title: string source: string publishTime: string content: string }在页面的aboutToAppear生命周期中初始化数据库创建存储表async initDatabase(): PromiserelationalStore.RdbStore { const STORE_CONFIG: relationalStore.StoreConfig { name: news.db, securityLevel: relationalStore.SecurityLevel.S1 }; const SQL_CREATE_TABLE CREATE TABLE IF NOT EXISTS news ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, source TEXT, publishTime TEXT, content TEXT ); let store await relationalStore.getRdbStore(getContext(this), STORE_CONFIG); await store.executeSql(SQL_CREATE_TABLE); return store; }3. 网络请求实现发起GET请求并解析JSON数据为NewsItem数组。注意使用try-catch捕获异常并在结束后销毁httpRequest对象typescriptasync fetchNewsFromNetwork(): Promise {let httpRequest http.createHttp();let response await httpRequest.request(https://api.example.com/news, // 替换为真实接口{method: http.RequestMethod.GET,header: { Content-Type: application/json },readTimeout: 5000,connectTimeout: 5000});// 假设返回格式为 { code: 200, data: [...] }let result JSON.parse(response.result as string);let data: Array [];if (result.code