一、课程笔记
1.1 订阅网络状态变化
1.1.1 网络状态概述

1.1.2 获取网络信息
(1)创建网络对象



(2)createNetConnection接口的具体使用

(3)获取默认激活网络及其能力


1.1.3 订阅网络状态
在获取网络状态后,如何订阅其状态变化呢?
不妨以视频应用为例。当网络状态可以正常获取资源时,视频正常播放;当网络断开时无法加载网络资源,则需要向用户发出提示,要实现这样的功能,需要订阅其对应事件。

(1)可订阅事件

下面
· 网络可用事件

· 网络阻塞状态事件

· 网络能力变化事件

· 网络连接信息变化事件

· 网络丢失事件

· 网络不可用事件

(2)常见事件订阅场景
· 从"无网络"到"有网络"
当设备从无网络状态变为有网络状态时,会:
- 首先触发网络可用事件;
- 此时网络的能力和链接信息发生变化,会触发网络能力变化事件和网络连接信息变化事件。

· 从"有网络"到"无网络"
当设备从有网络状态变为无网络状态时,会:
- 触发网络丢失事件。

· 从"WiFi网络"到"蜂窝网络"
当设备从WiFi网络切换成蜂窝网络时,会:
- 先触发网络丢失事件,表示丢失WiFi网络;
- 之后触发网络可用事件,表示蜂窝网络可用;
- 由于网络能力发生了变更,还会触发网络能力变化事件。

1.1.4 开发实践
本节课将着重讲解在"登录页面"中订阅网络状态。大致可分为以下几个步骤:

(1)订阅网络状态的开发流程






1.2 使用HTTP访问网络
许多场景下,应用需要从服务端获取数据。比如,下图所示的天气应用、新闻资讯应用等。
1.2.1 HTTP概述
HTTP的全称叫做超文本传输协议,是一个简单的请求响应协议。客户端降服端发起请求,服务端接收请求后返回相应的资源给客户端。这一过程中,HTTP协议基于TCP/IP通信协议传递数据,
确保了客户端与服务器之间的稳定通讯是万比网数据通讯的基础。
在HTTP请求中常见的请求方法,包括:GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE和CONNECT等。

前面的场景都是通过POST的请求方式实现的,这里我们来看一个GET请求的具体应用场景。
在浏览器中输入网址并访问时,浏览器就是用GET请求来获取网页文件的。

1.2.2 HTTP工作流程
(1)工作流程概述
- 首先,客户单和服务器之间会基于传输层协议建立链接,
- 连接成功后,客户端向服务器发送请求中包含要访问的资源的URL、请求方法、请求头等信息;
- 服务器接触到请求后,根据请求中的信息找到对应的资源进行处理;
- 并将处理结果封装在响应中返回给客户端;
- 在完成请求响应周期后,客户端和服务器之间的链接会关闭。
这样就完成了一个请求响应过程。在这个过程中开发者需要重点关注的是发送请求和处理响应这两个步骤。

(2)发起请求



· GET请求方式

· POST请求方式

(3)处理响应

· 状态码

1.2.3 案例:HTTP请求开发实践
在上一个学期路径中,我们通过加载本地数据的方式,完成了Codelabs案例中,页面与数据的简单页面开发。那么在这节课中,我们将结合Codelabs案例,并运用刚刚所学的知识,通过HTTP请求数据并将其渲染为图中的列表。

在这个列表中,我们希望通过GET请求和POST的请求,分别获取列表项中的不同资源。
- 首先,我们需要创建一个HTTP对象,为后续调用方法获取资源做准备。
- 然后,我们分别发起GET请求和POST,请求获取资源并处理响应结果。
- 并在请求结束后,销毁请求对象。
(1)HTTP请求的开发流程



· GET方式请求图片资源


· POST方式请求列表项资源



(2)渲染页面


1.3 使用RCP访问网络
1.3.0 为什么要引入RCP
在上一节课中我们学习了如何使用HTTP访问网络。然而在面对大规模应用开发时, HTTP的繁琐与管理不便的弊端逐渐显现。为此,HarmonyOS引入了RCP能力,旨在通过声明式开发范式提供更为便捷、场景化的HTTP API,并辅以基于绘画的多线程模型,实现HTTP参数的动态调整与部署。
RCP不仅继承了HTTP的核心功能,更在并发场景下进行了性能优化------数据传输的速度更快,整体性能更强。
1.3.1 RCP概述

(1)RCP与HTTP能力对比

(2)RCP的优势

1.3.2 RCP业务流程
(1)RCP整体业务流程

(2)创建会话(Session)

(3)发起请求

· 发起GET请求

· 发起POST请求

(4)处理响应

· 状态码(StatusCode)

1.3.3 RCP开发实践

(1)RCP请求的开发流程



· 发起GET请求------获取图片资源


· 发起POST请求------获取列表项资源



(2)渲染页面


二、习题整理
2.1 判断题
- 订阅网络状态变化事件时,通过NetConnection类型的对象调用on方法,传入具体事件类型即可
答案:B
- 若使用HTTP发起一个GET请求,直接调用get方法,传入请求资源的URL,即可发起请求:
答案:B
- 当RCP请求完毕时,须调用close方法主动销毁Session对象:
答案:A
2.2 单选题
- 使用HTTP发起网络请求,需要以下哪种权限:
- A. ohos.permission.USE_BLUETOOTH
- B. ohos.permission.INTERNET
- C. ohos.permission.REQUIRE_FORM
- D. ohos.permission.LOCATION
答案:B
- 向服务器提交表单数据,以下哪种请求方式比较合适:
- A. RequestMethod.GET
- B. RequestMethod.POST
- C. RequestMethod.PUT
- D. RequestMethod.DELETE
答案:B
- 使用RCP发起请求时,可以调用Session类提供的方法。以下哪个不是Session类的对象可以调用的方法:
- A. get
- B. post
- C. put
- D. request
答案:D
- 使用RCP发起请求,客户端收到响应后,可以对其进行解析,处理响应结果。以下哪个是响应结果中包含的字段:
- A. request
- B. statusCode
- C. headers
- D. 以上都是
答案:D
2.3 多选题
- 当设备的网络状态从无网络到有网络时,会触发以下哪些事件:
- A. 网络可用事件(netAvailable)
- B. 网络不可用事件(netUnavailable)
- C. 网络能力变化事件(netCapabilitiesChange)
- D. 网络连接信息变化事件(netConnectionPropertiesChange)
答案:ACD
- 关于HTTP,以下描述正确的是:
- A. HTTP请求支持GET、POST、PUT等常用的请求方式
- B. 调用request方法时,若不配置请求方式,默认发起POST请求
- C. POST请求的参数可以在extraData中指定
- D. 执行createHttp成功后,返回一个HttpRequest类型的对象,里面包括request、requestInStream、destroy、on和off方法
答案:ACD
- 关于RCP,以下描述正确的是:
- A. RCP提供自定义证书校验、忽略SSL校验等证书验证功能
- B. RCP提供会话管理能力,每个会话在独立的线程中运行
- C. 相较于HTTP,RCP提供更加便捷、场景化的API,简化了开发流程
- D. RCP提供多种方式发起请求,调用相应的接口即可
答案:ABCD
三、心得体会
3.1 预览器有坑!!!
写本讲的案例中,在写http请求的时候,如下图所示,预览器始终展示不出来get请求的箭头图标。

然后到了rcp请求的时候,如下图所示,更是整个列表信息什么也不显示了。

所以,这一块一定要用本地模拟器去实现!如下图所示,到了模拟器中,该有的都有。

3.2 加上@Entry装饰器
在案例中,编辑Home.ets的时候,应当新增一个临时的@Entry装饰器。这样就可以在预览器中观察到相应效果。否则,预览器会因没有@Entry、@Previewer,不会渲染UI。

3.3 课程项目
本课程中的案例,"页面与数据"案例,我已将最终代码上传到Gitee,大家可以自行拉取------仓库:page-and-data03。
