当前位置: 首页 > news >正文

鸿蒙应用开发-轻松获取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 异步方法、数据接口泛型使用、路由跳转等,以上若有错误和不足望大家理解,我们友好交流共同学习

http://www.dtcms.com/a/61966.html

相关文章:

  • 【从零开始学习计算机科学】操作系统(七)文件管理
  • Vue3 Pinia 符合直觉的Vue.js状态管理库
  • Trae AI 辅助修复uniapp 微信小程序的Bug
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_02带边框和斑马纹的固定表头表格
  • Linux第0节:Linux环境的搭建
  • ES C++客户端安装及使用
  • vue3如何配置环境和打包
  • el-table中slot=“header“和#header的区别
  • Vue 组件通信 - 子传父
  • C#程序结构及基本组成说明
  • Deeplabv3+改进3:在主干网络中添加NAMAttention|助力涨点!
  • 不仅可以用AI辅助学习,更可以让AI制定学习计划
  • 微服务——网关、网关登录校验、OpenFeign传递共享信息、Nacos共享配置以及热更新、动态路由
  • 基于开源AI大模型的精准零售模式创新——融合AI智能名片与S2B2C商城小程序源码的“人工智能 + 线下零售”路径探索
  • SEO长尾关键词增效策略
  • Nuxt.js 全栈开发指南:构建现代 Web 应用的终极解决方案
  • 【2025力扣打卡系列】0-1背包 完全背包
  • UI-APP---基于HBuilder X的微信小程序
  • 学习笔记10——并发编程2线程安全问题与同步机制
  • C++ 编程基础:注释、字符串、输入输出、日期处理、修饰符
  • LeetCode 2269.找到一个数字的 K 美丽值:字符串数字转换(模拟)
  • postgresql json和jsonb问题记录
  • 多方安全计算(MPC)电子拍卖系统
  • c#中使用时间戳转换器
  • 在vs中无法用QtDesigner打开ui文件的解决方法
  • DeepSeek本地化部署与跨域访问架构构建
  • 基于langchain+llama2的本地私有大语言模型实战
  • 义乌购商品详情接口调用指南:Python实战代码与完整示例
  • 【算法】BST的非递归插入,删除,查询
  • 蓝桥杯[每日两题] 练习题:盛最多水的容器 三数之和(java版)