赞
踩
在鸿蒙的广袤开发世界中,网络层作为信息交换的桥梁,其重要性不言而喻。今天,我将带领大家一同探索如何以艺术般的手法,优雅地封装鸿蒙官方的网络库,为我们的应用搭建一个高效、灵活的网络层。我们在下一篇章中,将深入阐述如何利用这一封装完善的网络库,轻松驾驭网络层的开发与使用。
在鸿蒙应用开发中,网络请求的封装不仅是为了简化开发流程,更是为了提高代码的复用性和可维护性。我们的封装目标主要围绕以下两点:
为了统一管理网络请求中的错误码,我们定义了一个NetworkServiceErrorConst
类,用于存储各种网络请求可能遇到的错误码:
export class NetworkServiceErrorConst {
// 网络不可用
static readonly UN_AVAILABLE: number = 100000;
// URL错误
static readonly URL_ERROR: number = 100001;
// URL不存在错误
static readonly URL_NOT_EXIST_ERROR: number = 100002;
// 网络错误
static readonly NET_ERROR: number = 100003;
// ...其他可能的错误码
}
同时,我们还需要定义与错误码对应的错误字符串,以便在应用中展示给用户:
{
"name": "network_unavailable",
"value": "网络不可用"
},
{
"name": "invalid_url_format",
"value": "URL格式不合法"
},
{
"name": "invalid_url_not_exist",
"value": "URL不存在"
}
为了确保网络请求中的URL格式正确,我们提供了一个isValidUrl
函数,它使用正则表达式来验证URL的有效性。
private isValidUrl(url: string): boolean { // 正则表达式匹配各种可能的URL格式 const urlPattern = new RegExp( '^(https?:\\/\\/)?' + // 协议 '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // 域名 '((\\d{1,3}\\.){3}\\d{1,3}))' + // 或IPv4地址 '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // 端口和路径 '(\\?[;&a-z\\d%_.~+=-]*)?' + // 查询字符串 '(\\#[-a-z\\d_]*)?$', // 片段定位符 'i' // 忽略大小写 ); return urlPattern.test(url); // 返回验证结果 } // 使用示例 if (isValidUrl("http://example.com")) { console.log("URL is valid."); } else { console.log("URL is invalid."); }
当需要在URL中附加查询参数时,appendQueryParams
函数可以帮助我们轻松实现。它支持处理单个值或数组值的参数,并自动处理编码。
private appendQueryParams(url: string, queryParams: Map<string, any> | undefined): string { if (!queryParams || queryParams.size === 0) { return url; } const paramsArray: string[] = []; queryParams.forEach((value, key) => { if (Array.isArray(value)) { for (let i = 0; i < value.length; i++) { paramsArray.push(`${ encodeURIComponent(`${ key}[${ i}]`)}=${
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。