国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫(kù)使用講解和封裝

這篇具有很好參考價(jià)值的文章主要介紹了【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫(kù)使用講解和封裝。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

現(xiàn)在網(wǎng)上的應(yīng)用,基本都是網(wǎng)絡(luò)應(yīng)用,需要進(jìn)行聯(lián)網(wǎng)獲取數(shù)據(jù),而常用的聯(lián)網(wǎng)獲取數(shù)據(jù)的方式有http、socket、websocket等。

在鴻蒙應(yīng)用、服務(wù)中,stage模式開發(fā)下,鴻蒙官方為我們提供了一個(gè)網(wǎng)絡(luò)組件庫(kù) http ,我們通過(guò)

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

http網(wǎng)絡(luò)庫(kù)組件介紹

@ohos.net.http (數(shù)據(jù)請(qǐng)求)
該組件提供HTTP數(shù)據(jù)請(qǐng)求能力。應(yīng)用可以通過(guò)HTTP發(fā)起一個(gè)數(shù)據(jù)請(qǐng)求,支持常見的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
具體查看官網(wǎng)
通過(guò)官網(wǎng)的介紹,可以很快上手該組件的使用,下面我們對(duì)該網(wǎng)絡(luò)庫(kù)進(jìn)行簡(jiǎn)單的封裝,方便我們的使用

http網(wǎng)絡(luò)庫(kù)封裝

網(wǎng)絡(luò)庫(kù)工程結(jié)構(gòu)如下圖:
【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫(kù)使用講解和封裝,Harmony,harmonyos,http,華為,ArkTS
具體步驟如下:

  1. 創(chuàng)建Har Module
  2. 創(chuàng)建RequestOption請(qǐng)求配置類
  3. 創(chuàng)建HttpCore核心類
  4. 創(chuàng)建HttpManager對(duì)外管理類
  5. 對(duì)外組件導(dǎo)出
  6. 添加網(wǎng)絡(luò)權(quán)限

創(chuàng)建Har Module

我們創(chuàng)建一個(gè)Module ,類型選擇為Har,3.1Beta IDE選擇 Visual Library,這里我們創(chuàng)建module名稱為

httpLibrary。

創(chuàng)建RequestOption 配置類

代碼如下:

/**
 * <pre>
 * @desc  : 網(wǎng)絡(luò)請(qǐng)求配置
 * </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"
}

這里字段大家可自行拓展,我這里簡(jiǎn)單添加了幾個(gè)常用字段,包括url、urlParams、header、extraData、大家也可以增加一些諸如UserAgent之類的網(wǎng)絡(luò)配置。

創(chuàng)建HttpCore核心類

該類使我們這個(gè)網(wǎng)絡(luò)庫(kù)的主要核心代碼實(shí)現(xiàn),主要封裝’@ohos.net.http的API調(diào)用,提供便捷使用的API。

import http from '@ohos.net.http';
import { RequestOptions } from './RequestOptions';

/**
 * Http請(qǐng)求器
 */
export class HttpCore {

  /**
   * 發(fā)送請(qǐng)求
   * @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> {

    // 每一個(gè)httpRequest對(duì)應(yīng)一個(gè)HTTP請(qǐng)求任務(wù),不可復(fù)用
    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, // 當(dāng)使用POST請(qǐng)求時(shí)此字段用于傳遞內(nèi)容
      expectDataType: http.HttpDataType.STRING // 可選,指定返回?cái)?shù)據(jù)的類型
    });

    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(() => {
      // 當(dāng)該請(qǐng)求使用完畢時(shí),調(diào)用destroy方法主動(dòng)銷毀。
      httpRequest.destroy();
    })
    return resultPromise;
  }


  private appendQueryParams(url: string, queryParams: Record<string, string>): string {

    // todo 使用將參數(shù)拼接到url上
    return url;
  }

  private isValidUrl(url: string): boolean {

    //todo 實(shí)現(xiàn)URL格式判斷
    return true;

  }
}

export const httpCore = new HttpCore();

代碼講解:

  1. expectDataType: http.HttpDataType.STRING,這里固定了返回?cái)?shù)據(jù)為string,大家也可以通過(guò)RequestOptions中定義字段傳入,這里定義為string只是方便后續(xù)的string轉(zhuǎn)Bean;
  2. 定義sendRequest方法。
  3. 對(duì)請(qǐng)求配置進(jìn)行處理,這里進(jìn)行對(duì)Url進(jìn)行格式判斷,如果非正確格式,需要對(duì)外拋出錯(cuò)誤;需要進(jìn)行Url參數(shù)拼接;可對(duì)請(qǐng)求參數(shù)、請(qǐng)求結(jié)果進(jìn)行日志打??;對(duì)Http響應(yīng)碼進(jìn)行判斷,按200和非200請(qǐng)求碼進(jìn)行分類返回。
  4. 定義 request 進(jìn)行請(qǐng)求結(jié)果轉(zhuǎn)Bean的處理(這里默認(rèn)返回?cái)?shù)據(jù)為JSON 字符串,其他類型自行拓展),該方法也是對(duì)外的唯一函數(shù)。

創(chuàng)建HttpManager核心類

import { RequestOptions } from './RequestOptions';
import { httpCore as HttpCore } from './HttpCore';
/**
 * <pre>
 * @desc       : 對(duì)外管理器
 * </pre>
 */
export class HttpManager {
  private static mInstance: HttpManager;

  // 防止實(shí)例化
  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 為對(duì)外API調(diào)用入口類,提供單例對(duì)象跟發(fā)送請(qǐng)求API。

對(duì)外組件導(dǎo)出

在httpLibrary模塊的根目錄下有一個(gè) index.ets文件,在該文件中進(jìn)行需要對(duì)外導(dǎo)出的組件定義


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

到這里我們就完成了一個(gè)簡(jiǎn)易的網(wǎng)絡(luò)庫(kù)封裝,我們可以將該module導(dǎo)出Har包對(duì)外提供,也可以直接在項(xiàng)目中使用該module。

添加網(wǎng)絡(luò)權(quán)限

漏了一點(diǎn),這里記得為該網(wǎng)絡(luò)庫(kù)添加上網(wǎng)絡(luò)權(quán)限哦,在module.json5文件中

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

http網(wǎng)絡(luò)庫(kù)依賴和使用

依賴http網(wǎng)絡(luò)庫(kù)(httpLibrary)

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

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

使用http網(wǎng)絡(luò)庫(kù)(httpLibrary)

這里我們寫一個(gè)例子,使用該網(wǎng)絡(luò)庫(kù)進(jìn)行發(fā)送一個(gè)get請(qǐng)求

【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫(kù)使用講解和封裝,Harmony,harmonyos,http,華為,ArkTS
在entry下,任意頁(yè)面中,進(jìn)行請(qǐng)求調(diào)用。

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 是一個(gè)公開的get請(qǐng)求API(如果侵權(quán),請(qǐng)聯(lián)系我刪除,謝謝?。?br> 這里我們定一個(gè)了一個(gè)TestBean,進(jìn)行數(shù)據(jù)解析

/**
 * <pre>
 * @desc       : 測(cè)試Bean
 * </pre>
 */
export interface TestBean {

  /**
   * {
   "userId": 1,
   "id": 1,
   "title": "delectus aut autem",
   "completed": false
   }
   */

  userId: number,
  id: number,
  title: string,
  completed: boolean

}

這樣就完成了調(diào)用,接著我們將應(yīng)用裝機(jī),點(diǎn)擊獲取數(shù)據(jù)按鈕,可以在log面板看到如下輸出:

【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫(kù)使用講解和封裝,Harmony,harmonyos,http,華為,ArkTS
文章到此結(jié)束,需要Demo的或者是有問(wèn)題交流的,歡迎評(píng)論區(qū)留言。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-612312.html

到了這里,關(guān)于【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫(kù)使用講解和封裝的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HarmonyOS鴻蒙ArkTS,封裝http網(wǎng)絡(luò)請(qǐng)求

    HarmonyOS鴻蒙ArkTS,封裝http網(wǎng)絡(luò)請(qǐng)求

    要想使用http請(qǐng)求,系統(tǒng)必須要具備ohos.permission.INTERNET權(quán)限,在model.json5文件中的module模塊下添加如下請(qǐng)求權(quán)限: 在module.json5文件中 配置 在文件中定義,文件目錄自定義 至此整個(gè)請(qǐng)求封裝結(jié)束

    2024年02月20日
    瀏覽(20)
  • 鴻蒙ArkTS實(shí)現(xiàn)http,axios網(wǎng)絡(luò)請(qǐng)求

    鴻蒙ArkTS實(shí)現(xiàn)http,axios網(wǎng)絡(luò)請(qǐng)求

    實(shí)現(xiàn)http請(qǐng)求,在ArkTS中我們可以直接使用http如下代碼 實(shí)現(xiàn)axios我們需要使用一個(gè)第三方工具 下載ohpm工具包,點(diǎn)擊鏈接獲取。 2. 解壓文件,進(jìn)入“ohpm/bin”目錄,打開命令行工具,執(zhí)行如下指令初始化ohpm Windows環(huán)境下執(zhí)行: init.bat? 如果init.bat不可以使用./init.bat 3. 將ohpm配置

    2024年04月12日
    瀏覽(19)
  • 鴻蒙實(shí)戰(zhàn):ArkTs 開發(fā)一個(gè)鴻蒙應(yīng)用

    鴻蒙實(shí)戰(zhàn):ArkTs 開發(fā)一個(gè)鴻蒙應(yīng)用

    學(xué)習(xí)過(guò)的 ArkTs 知識(shí)點(diǎn),一步一步開發(fā)一個(gè)小的鴻蒙應(yīng)用示例,涉及到 ?ArkTs 語(yǔ)法、注解 @Entry 、 @Component 、 @state 、路由、生命周期、 @Prop 、 @Link 、常用組件的使用等等知識(shí)點(diǎn)。 要開發(fā)一個(gè)鴻蒙應(yīng)用,首先我們需要知道 系統(tǒng)是如何找到頁(yè)面的啟動(dòng)入口 。 鴻蒙如何啟動(dòng)應(yīng)用

    2024年02月22日
    瀏覽(25)
  • 鴻蒙開發(fā)系列教程(七)--ArkTS語(yǔ)言:狀態(tài)管理

    鴻蒙開發(fā)系列教程(七)--ArkTS語(yǔ)言:狀態(tài)管理

    如果希望構(gòu)建一個(gè)動(dòng)態(tài)的、有交互的界面,就需要引入“狀態(tài)”的概念 狀態(tài)管理機(jī)制:在聲明式UI編程框架中,UI是程序狀態(tài)的運(yùn)行結(jié)果,用戶構(gòu)建了一個(gè)UI模型,其中應(yīng)用的運(yùn)行時(shí)的狀態(tài)是參數(shù)。當(dāng)參數(shù)改變時(shí),UI作為返回結(jié)果,也將進(jìn)行對(duì)應(yīng)的改變。這些運(yùn)行時(shí)的狀態(tài)變化

    2024年01月20日
    瀏覽(18)
  • HarmonyOS鴻蒙應(yīng)用開發(fā)——HTTP網(wǎng)絡(luò)訪問(wèn)與封裝

    HarmonyOS鴻蒙應(yīng)用開發(fā)——HTTP網(wǎng)絡(luò)訪問(wèn)與封裝

    網(wǎng)絡(luò)基礎(chǔ)-TCPIP協(xié)議分層模型 TCP協(xié)議-三次握手與四次揮手 UDP協(xié)議-簡(jiǎn)單高效的傳輸協(xié)議 HTTP協(xié)議-應(yīng)用間的通信協(xié)議 鴻蒙應(yīng)用發(fā)起HTTP請(qǐng)求的基本使用,如下: 導(dǎo)入http模塊 創(chuàng)建httpRequest對(duì)象 發(fā)起http請(qǐng)求,并處理響應(yīng)結(jié)果 第一、導(dǎo)入http模塊: 第二、創(chuàng)建httpRequest對(duì)象, 注意的是

    2024年02月04日
    瀏覽(23)
  • 用Rust開發(fā)鴻蒙應(yīng)用(ArkTS NAPI)

    在DevEco Studio的模板工程中包含使用Native API的默認(rèn)工程,使用File-New-Create Project創(chuàng)建Native C++模板工程。 在此基礎(chǔ)上進(jìn)行修改 刪除 entry/src/main/cpp 打開 entry/build-profile.json5 刪除c++ build 配置 創(chuàng)建rust項(xiàng)目 修改 Cargo.toml lib.rs 添加測(cè)試代碼 添加對(duì)應(yīng)ts代碼 配置依賴 在 rust 根目錄下編

    2024年02月03日
    瀏覽(28)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS(stateStyles:多態(tài)樣式)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS(stateStyles:多態(tài)樣式)

    @Styles和@Extend僅僅應(yīng)用于靜態(tài)頁(yè)面的樣式復(fù)用,stateStyles可以依據(jù)組件的內(nèi)部狀態(tài)的不同,快速設(shè)置不同樣式。這就是我們本章要介紹的內(nèi)容stateStyles(又稱為:多態(tài)樣式)。 stateStyles是屬性方法,可以根據(jù)UI內(nèi)部狀態(tài)來(lái)設(shè)置樣式,類似于css偽類,但語(yǔ)法不同。ArkUI提供以下五種

    2024年04月15日
    瀏覽(31)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(容器組件:Scroll)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(容器組件:Scroll)

    可滾動(dòng)的容器組件,當(dāng)子組件的布局尺寸超過(guò)父組件的尺寸時(shí),內(nèi)容可以滾動(dòng)。 說(shuō)明: 該組件從API version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。 該組件嵌套List子組件滾動(dòng)時(shí),若List不設(shè)置寬高,則默認(rèn)全部加載,在對(duì)性能有要求的場(chǎng)

    2024年04月13日
    瀏覽(32)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:組件標(biāo)識(shí))

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:組件標(biāo)識(shí))

    id為組件的唯一標(biāo)識(shí),在整個(gè)應(yīng)用內(nèi)唯一。本模塊提供組件標(biāo)識(shí)相關(guān)接口,可以獲取指定id組件的屬性,也提供向指定id組件發(fā)送事件的功能。 說(shuō)明: 從API Version 8開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。 名稱 參數(shù)說(shuō)明 描述 id string 組件

    2024年04月22日
    瀏覽(40)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(容器組件:Flex)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(容器組件:Flex)

    以彈性方式布局子組件的容器組件。 說(shuō)明: 該組件從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。 Flex組件在渲染時(shí)存在二次布局過(guò)程,因此在對(duì)性能有嚴(yán)格要求的場(chǎng)景下建議使用Column、Row代替。 Flex組件主軸默認(rèn)不設(shè)置時(shí)撐滿父容

    2024年04月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包