鸿蒙HarmonyOS之封装Http请求工具类

一、常量类 Constants.ets

复制代码
//超时时间10秒
static readonly HTTP_READ_TIMEOUT: number = 10000;

//请求成功返回码
static readonly HTTP_CODE_200: number = 200;

//请求成功后data中的code值(根据实际情况定)
static readonly SERVER_CODE_SUCCESS: number = 0;

二、请求工具类HttpUtil.ets

复制代码
import { http } from '@kit.NetworkKit';
import ResponseResult from '../bean/ResponseResult';
import Constants, { ContentType } from '../constants/Constants';

//Get请求
export function httpRequestGet(url: string) {
  return httpRequest(url, http.RequestMethod.GET);
}

//Post请求
export function httpRequestPost(url: string, requestData: Object) {
  return httpRequest(url, http.RequestMethod.POST, requestData);
}

//处理请求参数和请求结果
function httpRequest(url: string, method: http.RequestMethod, params?: Object): Promise<ResponseResult> {
  let httpRequest = http.createHttp();
  let responseResult = httpRequest.request(url, {
    method: method,
    readTimeout: Constants.HTTP_READ_TIMEOUT,
    header: {
      'Content-Type': ContentType.JSON,
    },
    connectTimeout: Constants.HTTP_READ_TIMEOUT,
    extraData: params
  });
  let serverData = new ResponseResult();
  return responseResult.then((value: http.HttpResponse) => {
    let result = `${value.result}`;
    let resultJson: ResponseResult = JSON.parse(result);
    if (value.responseCode === Constants.HTTP_CODE_200) {
      if (resultJson.code === Constants.SERVER_CODE_SUCCESS) {
        serverData.value = resultJson.value;
      }
      serverData.code = resultJson.code;
      serverData.msg = resultJson.msg;
    } else {
      serverData.code = resultJson.code;
      serverData.msg = resultJson.msg;
    }
    return serverData;
  }).catch(() => {
    return serverData;
  });
}

三、使用示例

1、可新建一个ets文件存放请求对象RequestBean和请求接收ResponseBean等对象

复制代码
//DataPage类
export class DataPage<T> {

  pageIndex: number = 1; //页码
  pageSize: number = 10; //页面大小
  pageTotal: number = 1; //总页数
  amount: number = 0; //记录总数

  data: T[] = []; //本页数据
}

//请求Bean
export class ActivityRequest {

  token: string = "";
  clientType: string = "";
  page: number = 1;
}

//请求接收Bean
export class ActivityResponse {
  id: number = 0;
  mainActivityId: number = 0;
  name: string = "";
  .......
}

2、编写请求方法,传入请求参数,设置Url,处理请求结果等

复制代码
 RequestData(page: number): Promise<DataPage<ActivityResponse>> {
    return new Promise((resolve: Function) => {
      let url = '请求Url.....';
      let requestData: ActivityRequest = new ActivityRequest();
      requestData.clientType = 'HarmonyOS';
      PreferencesUtil.getLoginToken().then((value) => {
        requestData.token = value;
        requestData.page = page;
        Logger.debug(this.TAG,'请求Url:'+ url)
        Logger.debug(this.TAG,'请求参数信息:'+ JSON.stringify(requestData))

		//这里调用HttpUtil工具类里面的Post请求方法
        httpRequestPost(url, requestData).then((data: ResponseResult) => {
          if (data && data.code === Constants.SERVER_CODE_SUCCESS) {
            resolve(data.value);
            Logger.debug(this.TAG,'请求成功!')
            //可以在此处处理请求结果,也可以在步骤3所示请求回调中处理请求的结果
          } else {
            Logger.debug(this.TAG,'请求失败!' + data.code + ": " + data.msg)
            resolve(null);
            if (data.code === -1) {
              showToast('请求异常')
            }else {
              showToast(data.msg)
            }
          }
        }).catch(() => {
          Logger.error(this.TAG,'请求异常!')
          showToast('网络请求异常!')
          resolve(null);
        });
      });

    });
  }

3、调用,返回请求成功后的数据结果,可进行后续处理

复制代码
this.RequestData(page).then((result: DataPage<ActivityResponse>) => {
      if (result){
        Logger.debug(this.TAG,'页码pageIndex:'+ result.pageIndex + ' 每页数量pageSize:'+ result.pageSize + ' 总页数pageTotal:'+ result.pageTotal + '记录总数amount:' + result.amount)
        if(result.amount > 0) {
          Logger.debug(this.TAG,'数据:'+ JSON.stringify(this.liveDataList))
        }else{
          Logger.debug(this.TAG,'数据为空')
        }
      }
    });

四、完成,Nice!

相关推荐
程序猿乐锅18 分钟前
【计算机组成原理 | 第八章】I/O系统
运维·服务器·网络
Shadow(⊙o⊙)21 分钟前
数据链路层ARP协议、NAT路由技术、代理服务器、内网穿透、内网打洞、交换机+集线器
网络·网络协议·tcp/ip
青瓦梦滋31 分钟前
Linux高级IO
linux·运维·服务器·网络·网络协议·tcp/ip
ChinaDragonDreamer43 分钟前
HarmonyOS:Web使用Dsbridge与JavaScript完成交互
harmonyos·鸿蒙
xieliyu.2 小时前
HTTPS 加密流程深度解析|从 HTTP 痛点到 TLS 握手全过程
网络·笔记·网络协议·计算机网络·http·https
我爱cope2 小时前
【计算机网络 | 传输层5:TCP 如何实现可靠传输?滑动窗口、累计确认与重传机制】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
蓝速科技2 小时前
固定涉外场景台式翻译机选型与落地指南
网络·人工智能·自然语言处理·语音识别·技术分享
Java小学生丶2 小时前
[开源自荐] ZTShell,一个使用 Tauri 2 + Rust 全程由 AI 开发的跨平台桌面 SSH 工具
linux·网络·centos7·云服务器·开发技巧·资源分享·个人私货
星 海4 小时前
【网络】VirtualBox网络模式
网络·虚拟机·virtualbox·vm
测试猿实操笔记10 小时前
DNS 通俗讲解:域名 ↔ IP 翻译
网络·网络协议·tcp/ip