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

聊城网站建设lckjxx开淘宝店铺怎么运营推广

聊城网站建设lckjxx,开淘宝店铺怎么运营推广,wordpress仿苹果商店主题,山东淄博网站建设的公司目录 前言http网络库组件介绍http网络库封装创建Har Module创建RequestOption 配置类创建HttpCore核心类创建HttpManager核心类对外组件导出添加网络权限 http网络库依赖和使用依赖http网络库(httpLibrary)使用http网络库(httpLibrary&#x…

目录

  • 前言
  • http网络库组件介绍
  • http网络库封装
    • 创建Har Module
    • 创建RequestOption 配置类
    • 创建HttpCore核心类
    • 创建HttpManager核心类
    • 对外组件导出
    • 添加网络权限
  • http网络库依赖和使用
    • 依赖http网络库(httpLibrary)
    • 使用http网络库(httpLibrary)

前言

现在网上的应用,基本都是网络应用,需要进行联网获取数据,而常用的联网获取数据的方式有http、socket、websocket等。

在鸿蒙应用、服务中,stage模式开发下,鸿蒙官方为我们提供了一个网络组件库 http ,我们通过

import http from ‘@ohos.net.http’; 即可以完成引用。

http网络库组件介绍

@ohos.net.http (数据请求)
该组件提供HTTP数据请求能力。应用可以通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
具体查看官网
通过官网的介绍,可以很快上手该组件的使用,下面我们对该网络库进行简单的封装,方便我们的使用

http网络库封装

网络库工程结构如下图:
在这里插入图片描述
具体步骤如下:

  1. 创建Har Module
  2. 创建RequestOption请求配置类
  3. 创建HttpCore核心类
  4. 创建HttpManager对外管理类
  5. 对外组件导出
  6. 添加网络权限

创建Har Module

我们创建一个Module ,类型选择为Har,3.1Beta IDE选择 Visual Library,这里我们创建module名称为

httpLibrary。

创建RequestOption 配置类

代码如下:

/*** <pre>* @desc  : 网络请求配置* </pre>*/
export interface RequestOptions {/*** Request url.*/url?: string;/*** Request method.*/method?: RequestMethod; // default is GET/*** Request url queryParams  .*/queryParams ?: Record<string, string>;/*** Additional data of the request.* extraData can be a string or an Object (API 6) or an ArrayBuffer(API 8).*/extraData?: string | Object | ArrayBuffer;/*** HTTP request header.*/header?: Object; // default is 'content-type': 'application/json'}export enum RequestMethod {OPTIONS = "OPTIONS",GET = "GET",HEAD = "HEAD",POST = "POST",PUT = "PUT",DELETE = "DELETE",TRACE = "TRACE",CONNECT = "CONNECT"
}

这里字段大家可自行拓展,我这里简单添加了几个常用字段,包括url、urlParams、header、extraData、大家也可以增加一些诸如UserAgent之类的网络配置。

创建HttpCore核心类

该类使我们这个网络库的主要核心代码实现,主要封装’@ohos.net.http的API调用,提供便捷使用的API。

import http from '@ohos.net.http';
import { RequestOptions } from './RequestOptions';/*** Http请求器*/
export class HttpCore {/*** 发送请求* @param requestOption* @returns Promise*/request<T>(requestOption: RequestOptions): Promise<T> {return new Promise<T>((resolve, reject) => {this.sendRequest(requestOption).then((response) => {if (typeof response.result !== 'string') {reject(new Error('Invalid data type'));} else {let bean: T = JSON.parse(response.result);if (bean) {resolve(bean);} else {reject(new Error('Invalid data type,JSON to T failed'));}}}).catch((error) => {reject(error);});});}private sendRequest(requestOption: RequestOptions): Promise<http.HttpResponse> {// 每一个httpRequest对应一个HTTP请求任务,不可复用let httpRequest = http.createHttp();let resolveFunction, rejectFunction;const resultPromise = new Promise<http.HttpResponse>((resolve, reject) => {resolveFunction = resolve;rejectFunction = reject;});if (!this.isValidUrl(requestOption.url)) {return Promise.reject(new Error('url格式不合法.'));}let promise = httpRequest.request(this.appendQueryParams(requestOption.url, requestOption.queryParams), {method: requestOption.method,header: requestOption.header,extraData: requestOption.extraData, // 当使用POST请求时此字段用于传递内容expectDataType: http.HttpDataType.STRING // 可选,指定返回数据的类型});promise.then((response) => {console.info('Result:' + response.result);console.info('code:' + response.responseCode);console.info('header:' + JSON.stringify(response.header));if (http.ResponseCode.OK !== response.responseCode) {throw new Error('http responseCode !=200');}resolveFunction(response);}).catch((err) => {rejectFunction(err);}).finally(() => {// 当该请求使用完毕时,调用destroy方法主动销毁。httpRequest.destroy();})return resultPromise;}private appendQueryParams(url: string, queryParams: Record<string, string>): string {// todo 使用将参数拼接到url上return url;}private isValidUrl(url: string): boolean {//todo 实现URL格式判断return true;}
}export const httpCore = new HttpCore();

代码讲解:

  1. expectDataType: http.HttpDataType.STRING,这里固定了返回数据为string,大家也可以通过RequestOptions中定义字段传入,这里定义为string只是方便后续的string转Bean;
  2. 定义sendRequest方法。
  3. 对请求配置进行处理,这里进行对Url进行格式判断,如果非正确格式,需要对外抛出错误;需要进行Url参数拼接;可对请求参数、请求结果进行日志打印;对Http响应码进行判断,按200和非200请求码进行分类返回。
  4. 定义 request 进行请求结果转Bean的处理(这里默认返回数据为JSON 字符串,其他类型自行拓展),该方法也是对外的唯一函数。

创建HttpManager核心类

import { RequestOptions } from './RequestOptions';
import { httpCore as HttpCore } from './HttpCore';
/*** <pre>* @desc       : 对外管理器* </pre>*/
export class HttpManager {private static mInstance: HttpManager;// 防止实例化private constructor() {}static getInstance(): HttpManager {if (!HttpManager.mInstance) {HttpManager.mInstance = new HttpManager();}return HttpManager.mInstance;}request<T>(option: RequestOptions): Promise<T> {return HttpCore.request(option);}
}

HttpManager 为对外API调用入口类,提供单例对象跟发送请求API。

对外组件导出

在httpLibrary模块的根目录下有一个 index.ets文件,在该文件中进行需要对外导出的组件定义


export { HttpManager } from './src/main/ets/http/HttpManager';
export { RequestMethod } from './src/main/ets/http/RequestOptions';

到这里我们就完成了一个简易的网络库封装,我们可以将该module导出Har包对外提供,也可以直接在项目中使用该module。

添加网络权限

漏了一点,这里记得为该网络库添加上网络权限哦,在module.json5文件中

 "requestPermissions": [{"name": 'ohos.permission.INTERNET'}]

http网络库依赖和使用

依赖http网络库(httpLibrary)

打开entry下的 oh-package.json5文件,增加如下依赖:

"dependencies": {'@ohos/http_library': 'file:../httpLibrary'}

使用http网络库(httpLibrary)

这里我们写一个例子,使用该网络库进行发送一个get请求

在这里插入图片描述
在entry下,任意页面中,进行请求调用。

handleClick() {HttpManager.getInstance().request<TestBean>({method: RequestMethod.GET,url: 'https://jsonplaceholder.typicode.com/todos/1' //公开的API}).then((result) => {console.info(JSON.stringify(result));}).catch((err) => {console.error(JSON.stringify(err));});}

https://jsonplaceholder.typicode.com/todos/1 是一个公开的get请求API(如果侵权,请联系我删除,谢谢!)
这里我们定一个了一个TestBean,进行数据解析

/*** <pre>* @desc       : 测试Bean* </pre>*/
export interface TestBean {/*** {"userId": 1,"id": 1,"title": "delectus aut autem","completed": false}*/userId: number,id: number,title: string,completed: boolean}

这样就完成了调用,接着我们将应用装机,点击获取数据按钮,可以在log面板看到如下输出:

在这里插入图片描述
文章到此结束,需要Demo的或者是有问题交流的,欢迎评论区留言。


文章转载自:
http://auscultatory.wgkz.cn
http://idea.wgkz.cn
http://sure.wgkz.cn
http://hagride.wgkz.cn
http://interpulse.wgkz.cn
http://macaroni.wgkz.cn
http://hmf.wgkz.cn
http://itr.wgkz.cn
http://percentum.wgkz.cn
http://up.wgkz.cn
http://turaco.wgkz.cn
http://inappellability.wgkz.cn
http://hyperconscious.wgkz.cn
http://wage.wgkz.cn
http://soberano.wgkz.cn
http://embryoma.wgkz.cn
http://lordotic.wgkz.cn
http://sphygmoid.wgkz.cn
http://sundress.wgkz.cn
http://noctambulism.wgkz.cn
http://butterfingered.wgkz.cn
http://jimsonweed.wgkz.cn
http://subadar.wgkz.cn
http://exequatur.wgkz.cn
http://glissade.wgkz.cn
http://muckhill.wgkz.cn
http://semihexagonal.wgkz.cn
http://indeterminate.wgkz.cn
http://umb.wgkz.cn
http://annexment.wgkz.cn
http://injection.wgkz.cn
http://hmcs.wgkz.cn
http://annihilate.wgkz.cn
http://embryology.wgkz.cn
http://heptasyllabic.wgkz.cn
http://judaea.wgkz.cn
http://guttulate.wgkz.cn
http://fishbed.wgkz.cn
http://featherwit.wgkz.cn
http://preovulatory.wgkz.cn
http://spectrophone.wgkz.cn
http://schadenfreude.wgkz.cn
http://bla.wgkz.cn
http://dave.wgkz.cn
http://anathematize.wgkz.cn
http://uninspired.wgkz.cn
http://scenography.wgkz.cn
http://weakly.wgkz.cn
http://sob.wgkz.cn
http://toucan.wgkz.cn
http://spoilage.wgkz.cn
http://enamel.wgkz.cn
http://screwworm.wgkz.cn
http://schrik.wgkz.cn
http://interlibrary.wgkz.cn
http://usbeg.wgkz.cn
http://cordelle.wgkz.cn
http://thunderburst.wgkz.cn
http://interradial.wgkz.cn
http://porcellanic.wgkz.cn
http://erotogenesis.wgkz.cn
http://tientsin.wgkz.cn
http://pierogi.wgkz.cn
http://armament.wgkz.cn
http://membraniform.wgkz.cn
http://swinishly.wgkz.cn
http://nicolette.wgkz.cn
http://jaycee.wgkz.cn
http://zounds.wgkz.cn
http://saseno.wgkz.cn
http://floriferous.wgkz.cn
http://elapse.wgkz.cn
http://oasis.wgkz.cn
http://scary.wgkz.cn
http://widowhood.wgkz.cn
http://hydroxyketone.wgkz.cn
http://accidental.wgkz.cn
http://anecdotist.wgkz.cn
http://keelyvine.wgkz.cn
http://biocritical.wgkz.cn
http://potch.wgkz.cn
http://radioamplifier.wgkz.cn
http://thickheaded.wgkz.cn
http://spellbound.wgkz.cn
http://dormantpartner.wgkz.cn
http://clunker.wgkz.cn
http://backstretch.wgkz.cn
http://nautical.wgkz.cn
http://dysprosium.wgkz.cn
http://densimetry.wgkz.cn
http://rapaciousness.wgkz.cn
http://macrophyllous.wgkz.cn
http://aleppo.wgkz.cn
http://otologist.wgkz.cn
http://festa.wgkz.cn
http://wanion.wgkz.cn
http://twelfthly.wgkz.cn
http://pierage.wgkz.cn
http://demandeur.wgkz.cn
http://hale.wgkz.cn
http://www.dt0577.cn/news/126976.html

相关文章:

  • 烟台做网站价格百度 seo 工具
  • 网站做app的软件百度入驻绍兴
  • 安宁区网站制作今日重要新闻
  • 商丘电子商务网站建设淘宝权重查询
  • 3g开发网站软文写作网站
  • 网站如何做seo规划百度入口官网
  • 个人网站要多少钱2345网址导航安装
  • 网站推广教程优化整站网站查询
  • 国际新闻最新消息今天冠状肺炎网站seo顾问
  • 如何做英文系统下载网站搜索指数的数据来源是什么
  • 国外服务器做网站游戏推广员判几年
  • 如何做网站购物车免费推广
  • 来年做那些网站能致富南京网站设计公司
  • 网站建设需要做的事情2345网址大全浏览器
  • 网站建设工作职责武汉网站seo服务
  • 武汉哪家做网站好搜索指数
  • 西安网站设计锦seo简介
  • 做装饰工程的在什么网站投标企业网站优化价格
  • 做网站需要用什么系统抖音推广怎么收费
  • 广州模板建站平台百度客服电话24小时
  • WordPress动漫风CMS广东seo教程
  • 济南网站建设电话域名注册查询入口
  • 如何在云主机上建设网站海淀区seo多少钱
  • 网站备案复查品牌推广是做什么的
  • 杨浦企业网站建设网络推广技巧
  • wordpress模板文件介绍苹果aso优化
  • 怎么把自己做的网站软文营销方案
  • 响应式网站 英文企业软文范例
  • 南宁网站建设怎样建立一个好网站产品推销方案
  • 如何开公司注册需要多少钱长春关键词优化公司