HarmonyOS发送请求

1、封装请求库

1、在ets下面新建utils文件夹 创建request.ets

2、代码

// 导入请求包
import http from '@ohos.net.http';
// 根据后端返回的数据结构自己定义返回体
import Response from '../api/BaseReturn';
// 本地持久化存储
import PreferenceModel from '../mode/PreferenceModel';
interface requestHeader {
  "Content-Type"?: string,
  "Authorization"?: string
}
// 每一个httpRequest对应一个http请求任务,不可复用
let httpRequest = http.createHttp();
export const request = async (reqUrl: string, data: any, method?: http.RequestMethod, header?: requestHeader) :Promise<Response<any>> => {
  const url = reqUrl.includes('http' || 'https') ? reqUrl : 'https://xxx.xxx.com' + reqUrl
  const methodType = method || http.RequestMethod.POST
  const token = await PreferenceModel.getPreference('tokenInfo', 'token')
  let extraDataInfo = data || {}
  if (methodType === http.RequestMethod.GET || (header && header['Content-Type'] === 'application/x-www-form-urlencoded')) {
    extraDataInfo = Object.keys(data).map(function(key) {
      return key + '=' + data[key];
    }).join('&');
  }
  let responseResult = httpRequest.request(url, {
    method: methodType,
    connectTimeout: 60000,
    readTimeout: 60000,
    header: {
      'Hwkj-Custom-Client': 'PlatformOfWeb',
      "Authorization": token ? 'Bearer ' + token : '',
      ...header
    },
    extraData: extraDataInfo
  })
  let response = new Response();
  return responseResult.then((value: http.HttpResponse) => {
    console.log('value1', (value.result))
    if (value.responseCode === 200) {
      //获取返回数据,将返回的json数据解析成事先预定好的响应格式
      //这里建议和后端的保持一致
      let res: Response<any> = JSON.parse(`${value.result}`);
      response.Data = (res.Data || res.Data === null) || res;
      response.Content = res.Content || '';
      response.Succeeded = res.Succeeded || true;
      response.Type = res.Type || 200
     } else {
       response.Content = '请求错误';
       response.Type = 400;
     }
     return response;
  }).catch(() => {
    response.Content = '请求错误';
    response.Type = 400;
    return response;
  });
}

2、使用请求

1、在ets下面新建api文件夹

2、请求代码

// 导入封装好的请求
import  { request } from '../../utils/request'
import { GetFollowUpTempPageListType } from './types';
import BaseReturn from '../BaseReturn';
const FIX = 'consult'
/**
 * 获取随访模板
 */
export const GetFollowUpTempPage = (data: any): Promise<BaseReturn<GetFollowUpTempPageListType>> => {
  return request(`/${FIX}/api/v1/FollowUp/GetFollowUpTempPage`, data);
};

3、页面调用

import { GetFollowUpTempPage } from '../api/consult'
import { GetFollowUpTempPageType } from '../api/consult/types'
import { GetDict} from  '../api/dictionary'
import { GetDictType } from '../api/dictionary/types';
import PreferenceModel from '../mode/PreferenceModel';
@Entry
@Component
struct Home {
  @State message: string = 'Hello World'
  @State list: GetFollowUpTempPageType[] = []
  @State list1: GetDictType[] = []
  aboutToAppear() {
    this.getHomePostData()
    this.getHomeGetData()
  }
  async getHomeGetData() {
    const data = {
      code: 'DiseaseDict',
      orgId: null
    }
    let res = await GetDict(data)
    if (res.Type === 200) {
      this.list1 = res.Data
    }
  }
  async getHomePostData() {
    let res = await GetFollowUpTempPage({"PageIndex":1,"PageSize":10,"OrgId":null})
    if (res.Type === 200) {
      this.list = res.Data.Data
    }
  }
  build() {
    Column() {
      ForEach(this.list, (item: GetFollowUpTempPageType) => {
        Text(item.Name)
      })
      Text('------------------')
      ForEach(this.list1, (item: GetDictType) => {
        Text(item.Key)
      })
      Button('清除token', { type: ButtonType.Normal, stateEffect: true })
        .onClick(() => {
          PreferenceModel.deletePreferences('tokenInfo')
        })
    }
  }
}

4、效果

上一章:HarmonyOS实现登录页面-CSDN博客

下一章: HarmonyOS实现Tabs-CSDN博客

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多喜乐 长安宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值