HarmonyOS 鸿蒙Next封装 HTTP 请求类
HarmonyOS 鸿蒙Next封装 HTTP 请求类
<markdown _ngcontent-xew-c237="" class="markdownPreContainer">
import { http } from ‘@kit.NetworkKit’ import { promptAction } from ‘@kit.ArkUI’
// 所有接口返回数据的类型 export interface iResponseModel { /**
- 请求成功10000标志
/ code: number; /*
- 返回数据
/ data: T; /*
- 请求成功
/ message: string; /*
- 请求成功标志
*/ success: boolean; }
const baseUrl: string = 'https://api-harmony-teach.itheima.net/hm/' // url的基地址
export class HdHttp { // 静态的 get泛型方法 // get('getclock') 带参数调用:get('clockinInfo?year=2024&month=4') static async get(url: string) { try { // 2.0 发请求 const httpRequest = http.createHttp()
url = baseUrl + url
// 获取token
// 获取token,判断如果有token,则传,否则不传
let user = AppStorage.get(‘user’) as string;
let res = await httpRequest.request(url, {
method: http.RequestMethod.GET,
header: {
‘Authorization’: user
},
expectDataType: http.HttpDataType.OBJECT
})
// 响应
// 判断如果响应code为401则提示用户token失效,直接跳转到登录页面让用户重新登录
let resData = res.result as iResponseModel<T>
return resData
} catch (err) {
promptAction.showToast({ message: ‘get网络错误’ })
return Promise.reject(err) // 如果报错则将错误返回
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
}
// 静态的post泛型方法 // url: 请求url地址 // extraData:post请求体的参数,因为不是每个url都要求传递,所以定义为可选参数 /* 封装思路: 固定代码写死,可变的地方提炼成参数供外部调用的时候传入
*/ static async post(url: string, extraData?: Object) { try { // 创建http对象 const httpRequest = http.createHttp()
// 完整拼接url地址 url = baseUrl + url
// 设置请求参数 let options: http.HttpRequestOptions = { method: http.RequestMethod.POST, header: { "Content-Type": 'application/json' }, expectDataType: http.HttpDataType.OBJECT // http模块底层将服务器响应回来的json字符串自动调用JSON.parse转成对象 } // 判断如果extraData有值,则向options对象增加一个extraData的属性 if (extraData) { options.extraData = extraData } // 获取token,判断如果有token,则传,否则不传 let user = AppStorage.get('user') as string; if (user && options.header) { options.header['Authorization'] =
Bearer ${user}
} // 调用reqeust方法并且指定相应的参数 let res = await httpRequest.request(url, options)// 响应服务器的数据 // 由于不同的接口返回的数据类型不一样,所以此方法应该用一个泛型来替代,将来实际运行的时候是什么类型就返回什么类型 // 判断如果响应code为401则提示用户token失效,直接跳转到登录页面让用户重新登录 let resData = res.result as iResponseModel return resData
} catch (err) {
promptAction.showToast({ message: 'post网络错误' })
return Promise.reject(err) // 如果报错则将错误返回
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
} }
</markdown>关于HarmonyOS 鸿蒙Next封装 HTTP 请求类的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
升级HarmonyOS后,感觉手机的整体性能都有了很大的提升。
import { http } from '@kit.NetworkKit'
import { promptAction } from '@kit.ArkUI'
// 所有接口返回数据的类型
export interface iResponseModel<T> {
/**
- 请求成功10000标志
/
code: number;
/*
- 返回数据
/
data: T;
/*
- 请求成功
/
message: string;
/*
- 请求成功标志
*/
success: boolean;
}
const baseUrl: string = ‘https://api-harmony-teach.itheima.net/hm/’ // url的基地址
export class HdHttp {
// 静态的 get泛型方法
// get<t>(‘getclock’) 带参数调用:get<t>(‘clockinInfo?year=2024&month=4’)
static async get<T>(url: string) {
try {
// 2.0 发请求
const httpRequest = http.createHttp()
url = baseUrl + url
<span class="hljs-comment"><span class="hljs-comment">// 获取token</span></span>
<span class="hljs-comment"><span class="hljs-comment">// 获取token,判断如果有token,则传,否则不传</span></span>
<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> user = AppStorage.get(<span class="hljs-string"><span class="hljs-string">'user'</span></span>) as string;
<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> res = await httpRequest.request(url, {
method: http.RequestMethod.GET,
header: {
<span class="hljs-string"><span class="hljs-string">'Authorization'</span></span>: user
},
expectDataType: http.HttpDataType.OBJECT
})
<span class="hljs-comment"><span class="hljs-comment">// 响应</span></span>
<span class="hljs-comment"><span class="hljs-comment">// 判断如果响应code为401则提示用户token失效,直接跳转到登录页面让用户重新登录</span></span>
<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> resData = res.result as iResponseModel<T>
<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> resData
} <span class="hljs-keyword"><span class="hljs-keyword">catch</span></span> (err) {
promptAction.showToast({ message: <span class="hljs-string"><span class="hljs-string">'get网络错误'</span></span> })
<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> Promise.reject(err) <span class="hljs-comment"><span class="hljs-comment">// 如果报错则将错误返回</span></span>
}
}
// 静态的post泛型方法
// url: 请求url地址
// extraData:post请求体的参数,因为不是每个url都要求传递,所以定义为可选参数
/* 封装思路:
固定代码写死,可变的地方提炼成参数供外部调用的时候传入
-
*/
static async post<T>(url: string, extraData?: Object) {
try {
// 创建http对象
const httpRequest = http.createHttp()
// 完整拼接url地址
url = baseUrl + url
// 设置请求参数
let options: http.HttpRequestOptions = {
method: http.RequestMethod.POST,
header: {
“Content-Type”: ‘application/json’
},
expectDataType: http.HttpDataType.OBJECT // http模块底层将服务器响应回来的json字符串自动调用JSON.parse转成对象
}
// 判断如果extraData有值,则向options对象增加一个extraData的属性
if (extraData) {
options.extraData = extraData
}
// 获取token,判断如果有token,则传,否则不传
let user = AppStorage.get(‘user’) as string;
if (user && options.header) {
options.header[‘Authorization’] = Bearer ${user}
}
// 调用reqeust方法并且指定相应的参数
let res = await httpRequest.request(url, options)
// 响应服务器的数据
// 由于不同的接口返回的数据类型不一样,所以此方法应该用一个泛型来替代,将来实际运行的时候是什么类型就返回什么类型
// 判断如果响应code为401则提示用户token失效,直接跳转到登录页面让用户重新登录
let resData = res.result as iResponseModel<T>
return resData
} catch (err) {
promptAction.showToast({ message: ‘post网络错误’ })
return Promise.reject(err) // 如果报错则将错误返回
}
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
大佬,请问封装了http请求之后,我该如何在外部调用呢?如果我想调用get方法,以下这种方法是不是缺少泛型T?
HdHttp.get(url)
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
谢谢大佬,我知道了,在外部调用要这样写: HdHttp.get<object>(url) HdHttp.get<string>(url) … 根据后端返回的数据,决定尖括号里面的数据类型
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17