鸿蒙应用开发-轻松获取http网络请求
鸿蒙应用开发-轻松获取http网络请求
1.开启鸿蒙网络权限
我们以一个登陆请求为例分别展示封装前的代码和封装后的代码
使用的API主要是createHttp()和request(),在创建请求前我们先开启网络权限
打开目录entry/src/main/module.json5中的module.json5
"requestPermissions": [ { "name": "ohos.permission.INTERNET" }
2.以登录post请求为例发起请求
在这个案例中请求体中必须的两个参数:username、password
//发起网络请求,创建http请求 const req = http.createHttp() //根据URL地址,发起HTTP网络请求。 let res = await req.request('输入请求方式为post的网络url地址', { //请求方法 method: http.RequestMethod.POST, //请求头 header: { "Content-Type": "application/json" }, //请求参数 extraData: { username: this.username, password: this.password }, //将响应回来的值转换为一个对象 expectDataType: http.HttpDataType.OBJECT }) //存储拿到的数据,并对响应请求做判断,指定返回的数据数据类型 let resData = res.result AlertDialog.show({ message: JSON.stringify(res.result, null, 2) })
上面的请求成功后会得到一个返回的对象,打印后结果如图
3.数据接口
确定好数据对象我们为数据定义好接口用于接收响应的数据(其中有泛型接口)
export interface IResponseModel<T> { /** * 请求成功10000标志 */ code: number; /** * 返回数据 */ data: T; /** * 请求成功 */ message: string; /** * 请求成功标志 */ success: boolean; } /** * 返回数据 */ export interface ILoginUsersModel { /** * 后续交互使用的token */ token: string; }
4.接收响应
在对象后面定义好接收的数据类型,对resData进行修改
修改后的代码:
//发起网络请求,创建http请求 const req = http.createHttp() //根据URL地址,发起HTTP网络请求。 let res = await req.request('https://api-harmony-teach.itheima.net/hm/login', { method: http.RequestMethod.POST, header: { "Content-Type": "application/json" }, extraData: { username: this.username, password: this.password }, //将响应回来的值转换为一个对象 expectDataType: http.HttpDataType.OBJECT }) //存储拿到的数据,并对响应请求做判断,指定返回的数据数据类型 let resData = res.result as IResponseModel<ILoginUsersModel> //三个参数的含义:JSON.stringify(要被转换成JSON字符串的JavaScript值,用于控制如何转换对象的属性,用于控制输出字符串的格式化) AlertDialog.show({ message: JSON.stringify(res.result, null, 2) })
5.响应成功
响应成功后的状态码为10000,用状态码来判断是否是否登录成功,成功后跳转到相应的页面,并将登录所获取的必备信息储存到AppStorage中
if (resData.code !== 10000) { promptAction.showDialog({ message: resData.message }) return } else if (resData.code === 10000) { //存储登陆信息并跳转页面 AppStorage.setOrCreate('user', resData.data) router.replaceUrl({ url: 'pages/Index' })
在上面的内容中涉及到很多知识,例如:Promise对象的async 和await 异步方法、数据接口泛型使用、路由跳转等,以上若有错误和不足望大家理解,我们友好交流共同学习