鸿蒙应用开发 新闻数据加载

1 HTTP 数据请求概述

日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富、更加实用的体验。

那么要实现这样一种能实时从服务端获取数据的场景,就依赖于 HTTP 数据请求。

2 什么是 HTTP

HTTP 即超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

HTTP 的工作原理正如上图所示,客户端向服务端发出一条 HTTP 数据请求,服务端接收请求后向客户端返回一些数据,然后客户端再对这些数据进行解析和处理。

3 如何发起 HTTP 请求

HTTP 数据请求功能主要由 http 模块提供,包括发起请求、中断请求、订阅/取消订阅 HTTP Response Header 事件等。

在进行网络请求前,您需要在 module.json5 文件中申明网络访问权限。

{
    "module" : {
        "requestPermissions":[
           {
             "name": "ohos.permission.INTERNET"
           }
        ]
    }
}

应用访问网络需要申请 ohos.permission.INTERNET 权限,因为 HarmonyOS 提供了一种访问控制机制即应用权限,用来保证这些数据或功能不会被不当或恶意使用。

您可以按照以下步骤完成 HTTP 数据请求:

  1. 导入 http 模块。
  import http from '@ohos.net.http';
  1. 创建 httpRequest 对象。

    使用 createHttp() 创建一个 httpRequest 对象,里面包括常用的一些网络请求方法,比如 request、destroy、on(‘headerReceive’) 等。

  let httpRequest = http.createHttp();

需要注意的是每一个 httpRequest 对象对应一个 http 请求任务,不可复用。

  1. 订阅请求头(可选)。

    用于订阅 http 响应头,此接口会比 request 请求先返回,可以根据业务需要订阅此消息。

   httpRequest.on('headersReceive', (header) => {
       console.info('header: ' + JSON.stringify(header));
   });
  1. 发起 http 请求。

    http 模块支持常用的 POST 和 GET 等方法,封装在 RequestMethod 中。调用 request 方法发起网络请求,需要传入两个参数。第一个是请求的 url 地址,第二个是可选参数,类型为 HttpRequestOptions,用于定义可选参数的类型和取值范围,包含请求方式、连接超时时间、请求头字段等。

    使用 Get 请求,参数内容需要拼接到 URL 中进行发送,如下示例中在 url 后面拼接了两个自定义参数,分别命名为 param1 和 param2,值分别为 value1 和 value2:

   let url= "https://EXAMPLE_URL?param1=v1&param2=v2";
   let promise = httpRequest.request(
     // 请求 url 地址
     url,
     {
       // 请求方式
       method: http.RequestMethod.GET,
       // 可选,默认为 60s
       connectTimeout: 60000,
       // 可选,默认为 60s
       readTimeout: 60000,
       // 开发者根据自身业务需要添加 header 字段
       header: {
         'Content-Type': 'application/json'
       }
     });

POST 请求参数需要添加到 extraData 里面,如下示例中在 extraData 里面定义添加了两个自定义参数 param1 和 param2,值分别为 value1 和 value2:

   let url = "https://EXAMPLE_URL";
   let promise = httpRequest.request(
     // 请求 url 地址
     url,
     {
       // 请求方式
       method: http.RequestMethod.POST,
       // 请求的额外数据。
       extraData: {
         "param1": "value1",
         "param2": "value2",
       },
       // 可选,默认为 60s
       connectTimeout: 60000,
       // 可选,默认为 60s
       readTimeout: 60000,
       // 开发者根据自身业务需要添加 header 字段
       header: {
         'Content-Type': 'application/json'
       }
     });
  1. 处理响应结果。

    data 为网络请求返回的结果,err 为请求异常时返回的结果。data 的类型为 HttpResponse。

   promise.then((data) => { 
     if (data.responseCode === http.ResponseCode.OK) {
       console.info('Result:' + data.result);
       console.info('code:' + data.responseCode);
     }
   }).catch((err) => {
     console.info('error:' + JSON.stringify(err));
   });

其中 data.responseCode 为 http 请求返回的状态码,如果状态码为 http.ResponseCode.OK(即 200),则表示请求成功,更多状态码可以在 ResponseCode 中查看。

data.result 为服务器返回的业务数据,开发者可以根据自身业务场景解析此数据。

4 案例:新闻数据加载

简介

本篇 Codelab 是基于 ArkTS 的声明式开发范式实现的样例,主要介绍了数据请求和 touch 事件的使用。包含以下功能:

  1. 数据请求。
  2. 列表下拉刷新。
  3. 列表上拉加载。

相关概念

  • List:列表包含一系列相同宽度的列表项。
  • Tabs:通过页签进行内容视图切换的容器组件。
  • TabContent 组件:仅在 Tabs 中使用,对应一个切换页签的内容视图。
  • 数据请求:提供 HTTP 数据请求能力。
  • 触摸事件 onTouch:触摸动作触发调用该方法。

相关权限

添加网络权限:ohos.permission.INTERNET。

约束与限制

本篇 Codelab 需要搭建服务端环境,服务端如何搭建将在代码工程目录的 README 中详细介绍,文档中不再赘述。

源码地址

在公众号「Android指南」后台回复关键字「新闻」即可获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/281105.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

技术阅读周刊第十二期

年前最后一篇推送,提前祝大家新年快乐。 技术阅读周刊,每周更新。 历史更新 20231201:第八期20231215:第十期20231122:第十一期 Deno vs Go: Native hello world performance | Tech Tonic URL: https://medium.com/de…

R306指纹识别模块的硬件接口

1.外部接口尺寸图 采集芯片外形尺寸:33.4*20.4*3.79 mm 2.串行通讯 R306 指纹模块通讯接口定义: 3.USB 通讯 4.接口说明 4.1 UART a) UART 缺省波特率为 57.6kbps,数据格式:8 位数据位(低位在前)&#…

【leetcode100-020】【矩阵】旋转图像

【题干】 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 【思路】 怎么还整上小学奥数题了(不是对角翻转水平/垂…

什么是SEO?

什么是SEO? SEO代表“搜索引擎优化”。这是通过非付费(也称为“自然”)搜索引擎结果来提高网站流量的质量和数量以及品牌曝光率的做法。 尽管有首字母缩略词,但 SEO 既关乎搜索引擎本身,也关乎人。这是关于了解人们在…

设计模式(4)--类行为(10)--模板方法

1. 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2. 两种角色 抽象类(Abstract Class)、具体类(Concrete Class) 3. 优点 3.1 一种代码复用的基本技术。提取公共行为&am…

现代建筑 Modern Design 展示前端界面html推荐

前言 一款展示现代建筑的网页 一、需求分析 一个现代建筑展示网站是指利用现代技术和设计风格,以展示和推广各种建筑项目和设计作品为主要目的的网站。 作为一个现代建筑展示网站,以下是一些需要的要素: 响应式设计:现代建筑展…

mixins混淆请求字典封装库

摘要: 页面请求要使用到很多重点的查询,写在本页面的逻辑代码太混乱,所以可以抽离封装成功一个js库混淆进来! commonMixins.js: import {Toast} from "vant"; export const oplistMix {mounted() {this.GETSTORE_LOCA…

基于电商场景的高并发RocketMQ实战-Consumer端队列负载均衡分配机制、并发消费以及消费进度提交

🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁&#x1f3…

迅软科技助力高科技防泄密:从华为事件中汲取经验教训

近期,涉及华为芯片技术被窃一事引起广泛关注。据报道,华为海思的两个高管张某、刘某离职后成立尊湃通讯,然后以支付高薪、股权支付等方式,诱导多名海思研发人员跳槽其公司,并指使这些人员在离职前通过摘抄、截屏等方式…

MFC - 给系统菜单(About Dialog)发消息

文章目录 MFC - 给系统菜单(About Dialog)发消息概述笔记resource.h菜单的建立菜单项的处理MSDN上关于系统菜单项值的说法END MFC - 给系统菜单(About Dialog)发消息 概述 做了一个对话框程序, 在系统菜单(在程序上面的标题栏右击)中有"关于"的菜单. 这个是程序框架…

4.24 构建onnx结构模型-Slice

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Slice 结点进行分析 方式 方法一…

Grafana增加仪表盘

1.Grafana介绍 grafana 是一款采用Go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。 Grafana下载地址:https://grafana.com/g…

网际协议IPv4

基本介绍 网际协议IP是TCP/IP体系中两个重要的协议之一。IPv4虽有最终被IPv6取代的趋势,但它仍是当前使用的最重要的因特网协议。 与IP配套使用的还有3个协议: 地址解析协议ARP(Address Resolution Protocol)因特网控制报文协议ICMP(Internet Control …

年终跑步总结

第一个365天无间断年 以前也跑步很频繁,但今年是第一次365天未缺勤。年跑步量也是历来个人最多:2900km以上。 连续跑步天数累积超700天了 这里出现的签到天数累加只有666次,因为中间有跑步、但没有到app上签到,实际最近一次停…

EOS链Ubuntu环境Install Prebuilt Binaries(安装预构建的二进制文件)的安装

[TOC](EOS链Ubuntu环境Install Prebuilt Binaries(安装预构建的二进制文件)的安装) EOS官网:https://eos.io/ 第一步 Ubuntu安装命令: 以下有两种安装方式,可以任选其一: 本文章已经上传绑定资源,也可以用命令安装。…

【Matlab】ELM极限学习机时序预测算法

资源下载: https://download.csdn.net/download/vvoennvv/88681649 一,概述 ELM(Extreme Learning Machine)是一种单层前馈神经网络结构,与传统神经网络不同的是,ELM的隐层神经元权重以及偏置都是随机产生的…

微信小程序开发系列-09自定义组件样式特性

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…

AcWing算法提高课-2.3.1矩阵距离

算法提高课整理 CSDN个人主页:更好的阅读体验 本文同步发表于 CSDN | 洛谷 | AcWing | 个人博客 原题链接 题目描述 给定一个 01 矩阵,求矩阵中每个元素离 1 的最短曼哈顿距离。 输入格式 第一行两个整数 n , m n,m n,m。 接下来一个 n n n 行 …

【BERT】深入理解BERT模型1——模型整体架构介绍

前言 BERT出自论文:《BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding》 2019年 近年来,在自然语言处理领域,BERT模型受到了极为广泛的关注,很多模型中都用到了BERT-base或者是BE…

设计模式(4)--对象行为(11)--访问者

1. 意图 表示一个作用于某对象结构中的各元素的操作。 使你可以在不改变各元素的类的前提下定义于作用于这些元素的新操作。 2. 五种角色 抽象访问者(Visitor)、具体访问者(Concrete Visitor)、抽象元素(Element)、 具体元素(Concrete Element)、对象结构(ObjectStructure) 3…
最新文章