当我们在HarmonyOS NEXT中开发的应用,基本上都会使用网络请求,从服务端获取数据在客户端显示或者供用户交互,有时候网络发生变化时,我们需要做一些相应的操作,接下来我们一起来了解下在HarmonyOS NEXT下如何监听网络状态,如何向服务端请求网络
网络监听
网络监听需要声明接口调用所需要的权限:ohos.permission.GET_NETWORK_INFO
1.创建网络对象
从@kit.NetworkKit中导入connection命名空间,创建NetConnection对象
import { connection } from "@kit.NetworkKit";
netConnection= connection.createNetConnection(this.netSpecifier, this.timeout)
2.开启网络状态订阅
订阅默认网络状态发生变化的通知,订阅成功后进行后续步骤
openRegister(){
this.netConnection.register((error:BusinessError)=>{
hilog.info(0x0000, this.TAG,JSON.stringify(error))
})
}
3.订阅具体网络变化
订阅具体网络变化事件,如网络可用,网络丢失等
this.netConnection.on('netAvailable',(data:connection.NetHandle)=>{
promptAction.showToast({message:'当前可用网络:'+JSON.stringify(data),duration:2000});
});
this.netConnection.on('netLost',()=>{
promptAction.showToast({message:'网络丢失了',duration:2000});
});
具体的网络时间主要分为:
参数 | 说明 | 触发时机 |
---|---|---|
netAvailable | 网络可用事件 | 当设备连接到可用网络时触发 |
netBlockStatusChange | 网络阻塞状态事件 | 当建立网络连接超时、传输数据包丢失或网络带宽不足、负载过高时触发 |
netCapabilitiesChange | 网络能力变化事件 | 当网络的能力(如类型、带宽等)发生变化时触发 |
netConnectionPropertiesChange | 网络连接信息变化事件 | 当网络连接的信息(如IP地址、网关等)发生变化时触发 |
netLost | 网络丢失事件 | 当设备失去网络连接时触发 |
netUnavailable | 网络不可用事件 | 当设备处于无网络状态或网络不可用时触发 |
他们的触发条件关系如下图:
4.取消网络状态订阅
应用关闭时取消网络状态订阅,不在接受通知
unRegister(){
this.netConnection.unregister((error:BusinessError)=>{
hilog.info(0x0000, this.TAG,'移除网络状态订阅:'+JSON.stringify(error))
})
}
使用HTTP访问网络
场景介绍
应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
HTTP数据请求功能主要由http模块提供。
使用该功能需要申请ohos.permission.INTERNET权限
request接口开发步骤
- 从@kit.NetworkKit中导入http命名空间。
- 调用createHttp()方法,创建一个HttpRequest对象。
- 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
- 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
- 按照实际业务需要,解析返回结果。
- 调用该对象的off()方法,取消订阅http响应头事件。
- 当该请求使用完毕时,调用destroy()方法主动销毁。
// 引入包名
import { htt