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

HarmonyOS開(kāi)發(fā):基于http開(kāi)源一個(gè)網(wǎng)絡(luò)請(qǐng)求庫(kù)

這篇具有很好參考價(jià)值的文章主要介紹了HarmonyOS開(kāi)發(fā):基于http開(kāi)源一個(gè)網(wǎng)絡(luò)請(qǐng)求庫(kù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

網(wǎng)絡(luò)封裝的目的,在于簡(jiǎn)潔,使用起來(lái)更加的方便,也易于我們進(jìn)行相關(guān)動(dòng)作的設(shè)置,如果,我們不封裝,那么每次請(qǐng)求,就會(huì)重復(fù)大量的代碼邏輯,如下代碼,是官方給出的案例:

// 引入包名
import http from '@ohos.net.http';

// 每一個(gè)httpRequest對(duì)應(yīng)一個(gè)HTTP請(qǐng)求任務(wù),不可復(fù)用
let httpRequest = http.createHttp();
// 用于訂閱HTTP響應(yīng)頭,此接口會(huì)比request請(qǐng)求先返回??梢愿鶕?jù)業(yè)務(wù)需要訂閱此消息
// 從API 8開(kāi)始,使用on('headersReceive', Callback)替代on('headerReceive', AsyncCallback)。 8+
httpRequest.on('headersReceive', (header) => {
    console.info('header: ' + JSON.stringify(header));
});
httpRequest.request(
    // 填寫(xiě)HTTP請(qǐng)求的URL地址,可以帶參數(shù)也可以不帶參數(shù)。URL地址需要開(kāi)發(fā)者自定義。請(qǐng)求的參數(shù)可以在extraData中指定
    "EXAMPLE_URL",
    {
        method: http.RequestMethod.POST, // 可選,默認(rèn)為http.RequestMethod.GET
        // 開(kāi)發(fā)者根據(jù)自身業(yè)務(wù)需要添加header字段
        header: {
            'Content-Type': 'application/json'
        },
        // 當(dāng)使用POST請(qǐng)求時(shí)此字段用于傳遞內(nèi)容
        extraData: {
            "data": "data to send",
        },
        expectDataType: http.HttpDataType.STRING, // 可選,指定返回?cái)?shù)據(jù)的類型
        usingCache: true, // 可選,默認(rèn)為true
        priority: 1, // 可選,默認(rèn)為1
        connectTimeout: 60000, // 可選,默認(rèn)為60000ms
        readTimeout: 60000, // 可選,默認(rèn)為60000ms
        usingProtocol: http.HttpProtocol.HTTP1_1, // 可選,協(xié)議類型默認(rèn)值由系統(tǒng)自動(dòng)指定
    }, (err, data) => {
        if (!err) {
            // data.result為HTTP響應(yīng)內(nèi)容,可根據(jù)業(yè)務(wù)需要進(jìn)行解析
            console.info('Result:' + JSON.stringify(data.result));
            console.info('code:' + JSON.stringify(data.responseCode));
            // data.header為HTTP響應(yīng)頭,可根據(jù)業(yè)務(wù)需要進(jìn)行解析
            console.info('header:' + JSON.stringify(data.header));
            console.info('cookies:' + JSON.stringify(data.cookies)); // 8+
            // 取消訂閱HTTP響應(yīng)頭事件
            httpRequest.off('headersReceive');
            // 當(dāng)該請(qǐng)求使用完畢時(shí),調(diào)用destroy方法主動(dòng)銷毀
            httpRequest.destroy();
        } else {
            console.info('error:' + JSON.stringify(err));
            // 取消訂閱HTTP響應(yīng)頭事件
            httpRequest.off('headersReceive');
            // 當(dāng)該請(qǐng)求使用完畢時(shí),調(diào)用destroy方法主動(dòng)銷毀。
            httpRequest.destroy();
        }
    }
);

以上的案例,每次請(qǐng)求書(shū)寫(xiě)這么多代碼,在實(shí)際的開(kāi)發(fā)中,是無(wú)法承受的,所以基于此,封裝是很有必要的,把公共的部分進(jìn)行抽取包裝,固定不變的參數(shù)進(jìn)行初始化設(shè)置,重寫(xiě)基本的請(qǐng)求方式,這是我們封裝的基本宗旨。

我們先看一下封裝之后的調(diào)用方式:

異步請(qǐng)求

Net.get("url").requestString((data) => {
  //data 為 返回的json字符串
})

同步請(qǐng)求

const data = await Net.get("url").returnData<string>(ReturnDataType.STRING)
//data 為 返回的json字符串

裝飾器請(qǐng)求

@GET("url")
private getData():Promise<string> {
  return null
}

封裝之后,不僅使用起來(lái)更加的便捷,而且還拓展了請(qǐng)求類型,滿足不同需求的場(chǎng)景。

本篇的文章內(nèi)容大致如下:

1、net庫(kù)主要功能點(diǎn)介紹

2、net庫(kù)快速依賴使用

3、net庫(kù)全局初始化

4、異步請(qǐng)求介紹

5、同步請(qǐng)求介紹

6、裝飾器請(qǐng)求介紹

7、上傳下載介紹

8、Dialog加載使用

9、相關(guān)總結(jié)

一、net庫(kù)主要功能點(diǎn)介紹

目前net庫(kù)一期已經(jīng)開(kāi)發(fā)完畢,har包使用,大家可以看第二項(xiàng),截止到發(fā)文前,所支持的功能如下:

■?支持全局初始化

■?支持統(tǒng)一的BaseUrl

■?支持全局錯(cuò)誤攔截

■?支持全局頭參攔截

■?支持同步方式請(qǐng)求(get/post/delete/put/options/head/trace/connect)

■?支持異步方式請(qǐng)求(get/post/delete/put/options/head/trace/connect)

■?支持裝飾器方式請(qǐng)求(get/post/delete/put/options/head/trace/connect)

■?支持dialog加載

■?支持返回Json字符串

■?支持返回對(duì)象

■?支持返回?cái)?shù)組

■?支持返回data一層數(shù)據(jù)

■?支持上傳文件

■?支持下載文件

□?數(shù)據(jù)緩存開(kāi)發(fā)中……

二、net庫(kù)快速依賴使用

私服和遠(yuǎn)程依賴,由于權(quán)限和審核問(wèn)題,預(yù)計(jì)需要等到2024年第一季度面向所有開(kāi)發(fā)者,所以,只能使用本地靜態(tài)共享包和源碼?兩種使用方式,本地靜態(tài)共享包類似Android中的aar依賴,直接復(fù)制到項(xiàng)目中即可,目前源碼還在優(yōu)化中,先暴露靜態(tài)共享包這一使用方式。

本地靜態(tài)共享包har包使用

首先,下載har包,點(diǎn)擊下載

下載之后,把har包復(fù)制項(xiàng)目中,目錄自己創(chuàng)建,如下,我創(chuàng)建了一個(gè)libs目錄,復(fù)制進(jìn)去

HarmonyOS開(kāi)發(fā):基于http開(kāi)源一個(gè)網(wǎng)絡(luò)請(qǐng)求庫(kù),HarmonyOS點(diǎn)石成金,鴻蒙網(wǎng)絡(luò)請(qǐng)求,鴻蒙http網(wǎng)絡(luò)請(qǐng)求,HarmonyOs網(wǎng)絡(luò)請(qǐng)求,鴻蒙裝飾器網(wǎng)絡(luò)請(qǐng)求,鴻蒙網(wǎng)絡(luò)請(qǐng)求封裝

引入之后,進(jìn)行同步項(xiàng)目,點(diǎn)擊Sync?Now即可,當(dāng)然了你也可以,將鼠標(biāo)放置在報(bào)錯(cuò)處會(huì)出現(xiàn)提示,在提示框中點(diǎn)擊Run?'ohpm?install'

需要注意,@app/net,是用來(lái)區(qū)分目錄的,可以自己定義,比如@aa/bb等,關(guān)于靜態(tài)共享包的創(chuàng)建和使用,請(qǐng)查看如下我的介紹,這里就不過(guò)多介紹。

HarmonyOS開(kāi)發(fā):走進(jìn)靜態(tài)共享包的依賴與使用

查看是否引用成功

無(wú)論使用哪種方式進(jìn)行依賴,最終都會(huì)在使用的模塊中,生成一個(gè)oh_modules文件,并創(chuàng)建源代碼文件,有則成功,無(wú)則失敗,如下:

HarmonyOS開(kāi)發(fā):基于http開(kāi)源一個(gè)網(wǎng)絡(luò)請(qǐng)求庫(kù),HarmonyOS點(diǎn)石成金,鴻蒙網(wǎng)絡(luò)請(qǐng)求,鴻蒙http網(wǎng)絡(luò)請(qǐng)求,HarmonyOs網(wǎng)絡(luò)請(qǐng)求,鴻蒙裝飾器網(wǎng)絡(luò)請(qǐng)求,鴻蒙網(wǎng)絡(luò)請(qǐng)求封裝

三、net庫(kù)全局初始化

推薦在AbilityStage進(jìn)行初始化,初始化一次即可,初始化參數(shù)可根據(jù)項(xiàng)目需要進(jìn)行選擇性使用。

Net.getInstance().init({
  baseUrl: "https://www.vipandroid.cn", //設(shè)置全局baseurl
  connectTimeout: 10000, //設(shè)置連接超時(shí)
  readTimeout: 10000, //設(shè)置讀取超時(shí)
  netErrorInterceptor: new MyNetErrorInterceptor(), //設(shè)置全局錯(cuò)誤攔截,需要自行創(chuàng)建,可在這里進(jìn)行錯(cuò)誤處理
  netHeaderInterceptor: new MyNetHeaderInterceptor(), //設(shè)置全局頭攔截器,需要自行創(chuàng)建
  header: {}, //頭參數(shù)
  resultTag: []//接口返回?cái)?shù)據(jù)參數(shù),比如data,items等等
})

1、初始化屬性介紹

初始化屬性,根據(jù)自己需要選擇性使用。

屬性

類型

概述

baseUrl

string

一般標(biāo)記為統(tǒng)一的請(qǐng)求前綴,也就是域名

connectTimeout

number

連接超時(shí),默認(rèn)10秒

readTimeout

number

讀取超時(shí),默認(rèn)10秒

netErrorInterceptor

INetErrorInterceptor

全局錯(cuò)誤攔截器,需繼承INetErrorInterceptor

netHeaderInterceptor

INetHeaderInterceptor

全局請(qǐng)求頭攔截器,需繼承INetHeaderInterceptor

header

Object

全局統(tǒng)一的公共頭參數(shù)

resultTag

Array

接口返回?cái)?shù)據(jù)參數(shù),比如data,items等等

?

2、設(shè)置請(qǐng)求頭攔截

關(guān)于全局頭參數(shù)傳遞,可以通過(guò)以上的header參數(shù)或者在請(qǐng)求頭攔截里均可,如果沒(méi)有同步等邏輯操作,只是固定的頭參數(shù),建議直接使用header參數(shù)。

名字自定義,實(shí)現(xiàn)INetHeaderInterceptor接口,可在netHeader方法里打印請(qǐng)求頭或者追加請(qǐng)求頭。

import { HttpHeaderOptions, NetHeaderInterceptor } from '@app/net'

class MyNetHeaderInterceptor implements NetHeaderInterceptor {
  getHeader(options: HttpHeaderOptions): Promise<Object> {
    //可以進(jìn)行接口簽名,傳入頭參數(shù)
    return null
  }
}

HttpHeaderOptions對(duì)象

返回了一些常用參數(shù),可以用于接口簽名等使用。

export class HttpHeaderOptions {
  url?: string //請(qǐng)求地址
  method?: http.RequestMethod //請(qǐng)求方式
  header?: Object //頭參數(shù)
  params?: Object //請(qǐng)求參數(shù)
}

3、設(shè)置全局錯(cuò)誤攔截器

名字自定義,實(shí)現(xiàn)INetErrorInterceptor接口,可在httpError方法里進(jìn)行全局的錯(cuò)誤處理,比如統(tǒng)一跳轉(zhuǎn),統(tǒng)一提示等。

import { NetError } from '@app/net/src/main/ets/error/NetError';
import { INetErrorInterceptor } from '@app/net/src/main/ets/interceptor/INetErrorInterceptor';

export class MyNetErrorInterceptor implements INetErrorInterceptor {
  httpError(error: NetError) {
    //這里進(jìn)行攔截錯(cuò)誤信息

  }
}
NetError對(duì)象

可通過(guò)如下方法獲取錯(cuò)誤code和錯(cuò)誤描述信息。

/*
   * 返回code
   * */
getCode():number{
  return this.code
}

/*
* 返回message
* */
getMessage():string{
  return this.message
}

四、異步請(qǐng)求介紹

1、請(qǐng)求說(shuō)明

為了方便數(shù)據(jù)的針對(duì)性返回,目前異步請(qǐng)求提供了三種請(qǐng)求方法,在實(shí)際的?開(kāi)發(fā)中,大家可以針對(duì)需要,選擇性使用。

request方法
Net.get("url").request<TestModel>((data) => {
  //data 就是返回的TestModel對(duì)象
})

此方法,針對(duì)性返回對(duì)應(yīng)的data數(shù)據(jù)對(duì)象,如下json,則會(huì)直接返回需要的data對(duì)象,不會(huì)攜帶外層的code等其他參數(shù),方便大家直接的拿到數(shù)據(jù)。

{
  "code": 0,
  "message": "數(shù)據(jù)返回成功",
  "data": {}
}

如果你的data是一個(gè)數(shù)組,如下json:

{
  "code": 0,
  "message": "數(shù)據(jù)返回成功",
  "data": []
}

數(shù)組獲取

Net.get("url").request<TestModel[]>((data) => {
  //data 就是返回的TestModel[]數(shù)組
})

//或者如下

Net.get("url").request<Array<TestModel>>((data) => {
  //data 就是返回的TestModel數(shù)組
})

可能大家有疑問(wèn),如果接口返回的json字段不是data怎么辦?如下:

舉例一

{
  "code": 0,
  "message": "數(shù)據(jù)返回成功",
  "items": {}
}

舉例二

{
  "code": 0,
  "message": "數(shù)據(jù)返回成功",
  "models": {}
}

雖然網(wǎng)絡(luò)庫(kù)中默認(rèn)取的是json中的data字段,如果您的數(shù)據(jù)返回類型字段有多種,如上json,可以通過(guò)全局初始化resultTag進(jìn)行傳遞或者局部setResultTag傳遞即可。

全局設(shè)置接口返回?cái)?shù)據(jù)參數(shù)【推薦】

全局設(shè)置,具體設(shè)置請(qǐng)查看上邊的全局初始化一項(xiàng),只設(shè)置一次即可,不管你有多少種返回參數(shù),都可以統(tǒng)一設(shè)置。

 Net.getInstance().init({
  resultTag: ["data", "items", "models"]//接口返回?cái)?shù)據(jù)參數(shù),比如data,items等等
})

局部設(shè)置接口返回?cái)?shù)據(jù)參數(shù)

通過(guò)setResultTag方法設(shè)置即可。

Net.get("")
  .setResultTag(["items"])
  .request<TestModel>((data) => {

  })
requestString方法

requestString就比較簡(jiǎn)單,就是普通的返回請(qǐng)求回來(lái)的json字符串。

Net.get("url").requestString((data) => {
  //data 為 返回的json字符串
})
requestObject方法

requestObject方法也是獲取對(duì)象,和request不同的是,它不用設(shè)置返回參數(shù),因?yàn)樗欠祷氐恼麄€(gè)json對(duì)應(yīng)的對(duì)象,?也就是包含了code,message等字段。

Net.get("url").requestObject<TestModel>((data) => {
  //data 為 返回的TestModel對(duì)象
})

為了更好的復(fù)用共有字段,你可以抽取一個(gè)基類,如下:

export class ApiResult<T> {
  code: number
  message: string
  data: T
}

以后就可以如下請(qǐng)求:

Net.get("url").requestObject<ApiResult<TestModel>>((data) => {
  //data 為 返回的ApiResult對(duì)象
})
回調(diào)函數(shù)

回調(diào)函數(shù)有兩個(gè),一個(gè)成功一個(gè)失敗,成功回調(diào)必調(diào)用,失敗可選擇性調(diào)用。

只帶成功

Net.get("url").request<TestModel>((data) => {
  //data 為 返回的TestModel對(duì)象
})

成功失敗都帶

Net.get("url").request<TestModel>((data) => {
  //data 為 返回的TestModel對(duì)象
}, (error) => {
  //失敗
})

2、get請(qǐng)求

 Net.get("url").request<TestModel>((data) => {
  //data 為 返回的TestModel對(duì)象
})

3、post請(qǐng)求

Net.post("url").request<TestModel>((data) => {
  //data 為 返回的TestModel對(duì)象
})

4、delete請(qǐng)求

 Net.delete("url").request<TestModel>((data) => {
  //data 為 返回的TestModel對(duì)象
})

5、put請(qǐng)求

Net.put("url").request<TestModel>((data) => {
  //data 為 返回的TestModel對(duì)象
})

6、其他請(qǐng)求方式

除了常見(jiàn)的請(qǐng)求之外,根據(jù)系統(tǒng)api所提供的,也封裝了如下的請(qǐng)求方式,只需要更改請(qǐng)求方式即可,比如Net.options。

OPTIONS
HEAD
TRACE
CONNECT

7、各個(gè)方法調(diào)用

除了正常的請(qǐng)求方式之外,你也可以調(diào)用如下的參數(shù):

方法

類型

概述

setHeaders

Object

單獨(dú)添加請(qǐng)求頭參數(shù)

setBaseUrl

string

單獨(dú)替換BaseUrl

setParams

string?/?Object?/?ArrayBuffer

單獨(dú)添加參數(shù),用于post

setConnectTimeout

number

單獨(dú)設(shè)置連接超時(shí)

setReadTimeout

number

單獨(dú)設(shè)置讀取超時(shí)

setExpectDataType

http.HttpDataType

設(shè)置指定返回?cái)?shù)據(jù)的類型

setUsingCache

boolean

使用緩存,默認(rèn)為true

setPriority

number

設(shè)置優(yōu)先級(jí)?默認(rèn)為1

setUsingProtocol

http.HttpProtocol

協(xié)議類型默認(rèn)值由系統(tǒng)自動(dòng)指定

setResultTag

Array

接口返回?cái)?shù)據(jù)參數(shù),比如data,items等等

setContext

Context

設(shè)置上下文,用于下載文件

setCustomDialogController

CustomDialogController

傳遞的dialog控制器,用于展示dialog

代碼調(diào)用如下:

Net.get("url")
  .setHeaders({})//單獨(dú)添加請(qǐng)求頭參數(shù)
  .setBaseUrl("")//單獨(dú)替換BaseUrl
  .setParams({})//單獨(dú)添加參數(shù)
  .setConnectTimeout(10000)//單獨(dú)設(shè)置連接超時(shí)
  .setReadTimeout(10000)//單獨(dú)設(shè)置讀取超時(shí)
  .setExpectDataType(http.HttpDataType.OBJECT)//設(shè)置指定返回?cái)?shù)據(jù)的類型
  .setUsingCache(true)//使用緩存,默認(rèn)為true
  .setPriority(1)//設(shè)置優(yōu)先級(jí) 默認(rèn)為1
  .setUsingProtocol(http.HttpProtocol.HTTP1_1)//協(xié)議類型默認(rèn)值由系統(tǒng)自動(dòng)指定
  .setResultTag([""])//接口返回?cái)?shù)據(jù)參數(shù),比如data,items等等
  .setContext(this.context)//設(shè)置上下文,用于上傳文件和下載文件
  .setCustomDialogController()//傳遞的dialog控制器,用于展示dialog
  .request<TestModel>((data) => {
    //data 為 返回的TestModel對(duì)象
  })

五、同步請(qǐng)求介紹

同步請(qǐng)求需要注意,需要await關(guān)鍵字和async關(guān)鍵字結(jié)合使用。

 private async getTestModel(){
  const testModel = await Net.get("url").returnData<TestModel>()
}

1、請(qǐng)求說(shuō)明

同步請(qǐng)求和異步請(qǐng)求一樣,也是有三種方式,是通過(guò)參數(shù)的形式,默認(rèn)直接返回data層數(shù)據(jù)。

返回data層數(shù)據(jù)

和異步種的request方法類似,只返回json種的data層對(duì)象數(shù)據(jù),不會(huì)返回code等字段。

 private async getData(){
  const data = await Net.get("url").returnData<TestModel>()
  //data為 返回的 TestModel對(duì)象
}
返回Json對(duì)象

和異步種的requestObject方法類似,會(huì)返回整個(gè)json對(duì)象,包含code等字段。

 private async getData(){
  const data = await Net.get("url").returnData<TestModel>(ReturnDataType.OBJECT)
  //data為 返回的 TestModel對(duì)象
}
返回Json字符串

和異步種的requestString方法類似。

private async getData(){
  const data = await Net.get("url").returnData<string>(ReturnDataType.STRING)
  //data為 返回的 json字符串
}
返回錯(cuò)誤

異步方式有回調(diào)錯(cuò)誤,同步方式如果發(fā)生錯(cuò)誤,也會(huì)直接返回錯(cuò)誤,結(jié)構(gòu)如下:

{
  "code": 0,
  "message": "錯(cuò)誤信息"
}

除了以上的錯(cuò)誤捕獲之外,你也可以全局異常捕獲,

2、get請(qǐng)求


const data = await Net.get("url").returnData<TestModel>()

3、post請(qǐng)求


const data = await Net.post("url").returnData<TestModel>()

4、delete請(qǐng)求


const data = await Net.delete("url").returnData<TestModel>()

5、put請(qǐng)求


const data = await Net.put("url").returnData<TestModel>()

6、其他請(qǐng)求方式

除了常見(jiàn)的請(qǐng)求之外,根據(jù)系統(tǒng)api所提供的,也封裝了如下的請(qǐng)求方式,只需要更改請(qǐng)求方式即可,比如Net.options

OPTIONS
HEAD
TRACE
CONNECT

7、各個(gè)方法調(diào)用

除了正常的請(qǐng)求方式之外,你也可以調(diào)用如下的參數(shù):

方法

類型

概述

setHeaders

Object

單獨(dú)添加請(qǐng)求頭參數(shù)

setBaseUrl

string

單獨(dú)替換BaseUrl

setParams

string?/?Object?/?ArrayBuffer

單獨(dú)添加參數(shù),用于post

setConnectTimeout

number

單獨(dú)設(shè)置連接超時(shí)

setReadTimeout

number

單獨(dú)設(shè)置讀取超時(shí)

setExpectDataType

http.HttpDataType

設(shè)置指定返回?cái)?shù)據(jù)的類型

setUsingCache

boolean

使用緩存,默認(rèn)為true

setPriority

number

設(shè)置優(yōu)先級(jí)?默認(rèn)為1

setUsingProtocol

http.HttpProtocol

協(xié)議類型默認(rèn)值由系統(tǒng)自動(dòng)指定

setResultTag

Array

接口返回?cái)?shù)據(jù)參數(shù),比如data,items等等

setContext

Context

設(shè)置上下文,用于下載文件

setCustomDialogController

CustomDialogController

傳遞的dialog控制器,用于展示dialog

代碼調(diào)用如下:

const data = await Net.get("url")
  .setHeaders({})//單獨(dú)添加請(qǐng)求頭參數(shù)
  .setBaseUrl("")//單獨(dú)替換BaseUrl
  .setParams({})//單獨(dú)添加參數(shù)
  .setConnectTimeout(10000)//單獨(dú)設(shè)置連接超時(shí)
  .setReadTimeout(10000)//單獨(dú)設(shè)置讀取超時(shí)
  .setExpectDataType(http.HttpDataType.OBJECT)//設(shè)置指定返回?cái)?shù)據(jù)的類型
  .setUsingCache(true)//使用緩存,默認(rèn)為true
  .setPriority(1)//設(shè)置優(yōu)先級(jí) 默認(rèn)為1
  .setUsingProtocol(http.HttpProtocol.HTTP1_1)//協(xié)議類型默認(rèn)值由系統(tǒng)自動(dòng)指定
  .setResultTag([""])//接口返回?cái)?shù)據(jù)參數(shù),比如data,items等等
  .setContext(this.context)//設(shè)置上下文,用于上傳文件和下載文件
  .setCustomDialogController()//傳遞的dialog控制器,用于展示dialog
  .returnData<TestModel>()
//data為 返回的 TestModel對(duì)象

六、裝飾器請(qǐng)求介紹

網(wǎng)絡(luò)庫(kù)允許使用裝飾器的方式發(fā)起請(qǐng)求,也就是通過(guò)注解的方式,目前采取的是裝飾器方法的形式。

1、請(qǐng)求說(shuō)明

裝飾器和同步異步有所區(qū)別,只返回兩種數(shù)據(jù)類型,一種是json字符串,一種是json對(duì)象,暫時(shí)不提供返回data層數(shù)據(jù)。?在使用的時(shí)候,您可以單獨(dú)創(chuàng)建工具類或者ViewModel或者直接使用,都可以。

返回json字符串
@GET("url")
private getData():Promise<string> {
  return null
}
返回json對(duì)象
@GET("url")
private getData():Promise<TestModel> {
  return null
}

2、get請(qǐng)求

@GET("url")
private getData():Promise<TestModel> {
  return null
}

3、post請(qǐng)求

@POST("url")
private getData():Promise<TestModel> {
  return null
}

4、delete請(qǐng)求

@DELETE("url")
private getData():Promise<TestModel> {
  return null
}

5、put請(qǐng)求

@PUT("url")
private getData():Promise<TestModel> {
  return null
}

6、其他請(qǐng)求方式

除了常見(jiàn)的請(qǐng)求之外,根據(jù)系統(tǒng)api所提供的,也封裝了如下的請(qǐng)求方式,只需要更改請(qǐng)求方式即可,比如@OPTIONS。

OPTIONS
HEAD
TRACE
CONNECT

當(dāng)然,大家也可以使用統(tǒng)一的NET裝飾器,只不過(guò)需要自己設(shè)置請(qǐng)求方法,代碼如下:

@NET("url", { method: http.RequestMethod.POST })
private getData():Promise<string> {
  return null
}

7、裝飾器參數(shù)傳遞

直接參數(shù)傳遞

直接參數(shù),在調(diào)用裝飾器請(qǐng)求時(shí),后面添加即可,一般針對(duì)固定參數(shù)。

@GET("url", {
  baseUrl: "", //baseUrl
  header: {}, //頭參數(shù)
  params: {}, //入?yún)?  connectTimeout: 1000, //連接超時(shí)
  readTimeout: 1000, //讀取超時(shí)
  isReturnJson: true//默認(rèn)false 返回Json字符串,默認(rèn)返回json對(duì)象
})
private getData():Promise<string> {
  return null
}
動(dòng)態(tài)參數(shù)傳遞

動(dòng)態(tài)參數(shù)適合參數(shù)可變的情況下傳遞,比如分頁(yè)等情況。

@GET("url")
private getData(data? : HttpOptions):Promise<string> {
  return null
}

調(diào)用時(shí)傳遞

private async doHttp(){
  const data = await this.getData({
    baseUrl: "", //baseUrl
    header: {}, //頭參數(shù)
    params: {}, //入?yún)?    connectTimeout: 1000, //連接超時(shí)
    readTimeout: 1000, //讀取超時(shí)
    isReturnJson: true//默認(rèn)false 返回Json字符串,默認(rèn)返回json對(duì)象
  })
}
裝飾器參數(shù)傳遞

使用DATA裝飾器,DATA必須在上!

@DATA({
  baseUrl: "", //baseUrl
  header: {}, //頭參數(shù)
  params: {}, //入?yún)?  connectTimeout: 1000, //連接超時(shí)
  readTimeout: 1000, //讀取超時(shí)
  isReturnJson: true//默認(rèn)false 返回Json字符串,默認(rèn)返回json對(duì)象
})
@GET("url")
private getData():Promise<string> {
  return null
}

七、上傳下載介紹

1、上傳文件

Net.uploadFile("")//上傳的地址
  .setUploadFiles([])//上傳的文件 [{ filename: "test", name: "test", uri: "internal://cache/test.jpg", type: "jpg" }]
  .setUploadData([])//上傳的參數(shù) [{ name: "name123", value: "123" }]
  .setProgress((receivedSize, totalSize) => {
    //監(jiān)聽(tīng)上傳進(jìn)度
  })
  .request((data) => {
    if (data == UploadTaskState.COMPLETE) {
      //上傳完成
    }
  })
方法介紹

方法

類型

概述

uploadFile

string

上傳的地址

setUploadFiles

Array

上傳的文件數(shù)組

setUploadData

Array

上傳的參數(shù)數(shù)組

setProgress

回調(diào)函數(shù)

監(jiān)聽(tīng)進(jìn)度,receivedSize下載大小,?totalSize總大小

request

無(wú)

請(qǐng)求上傳,data類型為UploadTaskState,有三種狀態(tài):START(開(kāi)始),COMPLETE(完成),ERROR(錯(cuò)誤)

其他方法
刪除上傳進(jìn)度監(jiān)聽(tīng)
uploadRequest.removeProgressCallback()
刪除上傳任務(wù)
uploadRequest.deleteUploadTask((result) => {
  if (result) {
    //成功
  } else {
    //失敗
  }
})

2、下載文件

Net.downLoadFile("http://10.47.24.237:8888/harmony/log.har")
  .setContext(EntryAbility.context)
  .setFilePath(EntryAbility.filePath)
  .setProgress((receivedSize, totalSize) => {
    //監(jiān)聽(tīng)下載進(jìn)度
  })
  .request((data) => {
    if (data == DownloadTaskState.COMPLETE) {
      //下載完成
    }
  })
方法介紹

方法

類型

概述

downLoadFile

string

下載的地址

setContext

Context

上下文

setFilePath

string

下載后保存的路徑

setProgress

回調(diào)函數(shù)

監(jiān)聽(tīng)進(jìn)度,receivedSize下載大小,?totalSize總大小

request

無(wú)

請(qǐng)求下載,data類型為DownloadTaskState,有四種狀態(tài):START(開(kāi)始),COMPLETE(完成),PAUSE(暫停),REMOVE(結(jié)束)

其他方法
移除下載的任務(wù)
    downLoadRequest.deleteDownloadTask((result) => {
  if (result) {
    //移除成功
  } else {
    //移除失敗
  }
})
暫停下載任務(wù)
downLoadRequest.suspendDownloadTask((result) => {
  if (result) {
    //暫停成功
  } else {
    //暫停失敗
  }
})
重新啟動(dòng)下載任務(wù)
downLoadRequest.restoreDownloadTask((result) => {
  if (result) {
    //成功
  } else {
    //失敗
  }
})
刪除監(jiān)聽(tīng)下載進(jìn)度
downLoadRequest.removeProgressCallback()

八、Dialog加載使用

HarmonyOS開(kāi)發(fā):基于http開(kāi)源一個(gè)網(wǎng)絡(luò)請(qǐng)求庫(kù),HarmonyOS點(diǎn)石成金,鴻蒙網(wǎng)絡(luò)請(qǐng)求,鴻蒙http網(wǎng)絡(luò)請(qǐng)求,HarmonyOs網(wǎng)絡(luò)請(qǐng)求,鴻蒙裝飾器網(wǎng)絡(luò)請(qǐng)求,鴻蒙網(wǎng)絡(luò)請(qǐng)求封裝

1、定義dialog控制器

NetLoadingDialog是net包中自帶的,菊花狀彈窗,如果和實(shí)際業(yè)務(wù)不一致,可以更換。

private mCustomDialogController = new CustomDialogController({
  builder: NetLoadingDialog({
    loadingText: '請(qǐng)等待...'
  }),
  autoCancel: false,
  customStyle: true
})

2、調(diào)用傳遞控制器方法

此方法會(huì)自動(dòng)顯示和隱藏dialog,如果覺(jué)得不合適,大家可以自己定義即可。

setCustomDialogController(this.mCustomDialogController)

九、相關(guān)總結(jié)

開(kāi)發(fā)環(huán)境如下:

DevEco?Studio?4.0?Beta2,Build?Version:?4.0.0.400

Api版本:9

hvigorVersion:3.0.2

目前呢,暫時(shí)不支持緩存,后續(xù)會(huì)逐漸加上,大家在使用的過(guò)程中,需要任何的問(wèn)題,都可以進(jìn)行反饋,都會(huì)第一時(shí)間進(jìn)行解決。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-736425.html

到了這里,關(guān)于HarmonyOS開(kāi)發(fā):基于http開(kāi)源一個(gè)網(wǎng)絡(luò)請(qǐng)求庫(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應(yīng)用開(kāi)發(fā)】HTTP數(shù)據(jù)請(qǐng)求(十四)

    【HarmonyOS應(yīng)用開(kāi)發(fā)】HTTP數(shù)據(jù)請(qǐng)求(十四)

    文章末尾含相關(guān)內(nèi)容源代碼 日常生活中我們使用應(yīng)用程序看新聞、發(fā)送消息等,都需要連接到互聯(lián)網(wǎng),從服務(wù)端獲取數(shù)據(jù)。例如,新聞應(yīng)用可以從新聞服務(wù)器中獲取最新的熱點(diǎn)新聞,從而給用戶打造更加豐富、更加實(shí)用的體驗(yàn)。 那么要實(shí)現(xiàn)這樣一種能實(shí)時(shí)從服務(wù)端獲取數(shù)據(jù)

    2024年02月22日
    瀏覽(25)
  • HarmonyOS開(kāi)發(fā):開(kāi)源一個(gè)刷新加載組件

    HarmonyOS開(kāi)發(fā):開(kāi)源一個(gè)刷新加載組件

    系統(tǒng)Api中提供了下拉刷新組件Refresh,使用起來(lái)也是非常的好用,但是風(fēng)格和日常的開(kāi)發(fā),有著巨大的出入,效果如下: 顯然上面的效果是很難滿足我們實(shí)際的需求的,奈何也沒(méi)有提供的屬性可以更改,沒(méi)有辦法只好動(dòng)手封裝一個(gè)。 本篇的文章內(nèi)容大致如下: 1、下拉和上拉

    2024年02月06日
    瀏覽(15)
  • 【HarmonyOS】【ArkTS】如何使用HTTP網(wǎng)絡(luò)請(qǐng)求獲取動(dòng)態(tài)數(shù)據(jù)刷新UI界面

    【】 HttpRequest、ArkTS、網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求、@ohos.net.http 【前言】 在使用ArkTS開(kāi)發(fā)HarmonyOS應(yīng)用時(shí),需要調(diào)用HTTP網(wǎng)絡(luò)請(qǐng)求?@ohos.net.http?動(dòng)態(tài)獲取數(shù)據(jù),進(jìn)行UI列表刷新,這想必是應(yīng)用開(kāi)發(fā)最常見(jiàn)的功能。但是根據(jù)官網(wǎng)網(wǎng)絡(luò)請(qǐng)求的示例代碼進(jìn)行功能開(kāi)發(fā)時(shí),封裝方法進(jìn)行HTTP請(qǐng)求后

    2024年02月08日
    瀏覽(23)
  • 基于 HarmonyOS 的 HTTPS 請(qǐng)求過(guò)程開(kāi)發(fā)示例(ArkTS)

    基于 HarmonyOS 的 HTTPS 請(qǐng)求過(guò)程開(kāi)發(fā)示例(ArkTS)

    本篇 Codelab 基于網(wǎng)絡(luò)模塊以及 Webview 實(shí)現(xiàn)一次 HTTPS 請(qǐng)求,并對(duì)其過(guò)程進(jìn)行抓包分析。效果如圖所示: ●?Webview:提供 Web 控制能力,Web 組件提供網(wǎng)頁(yè)顯示能力。 ●?HTTP數(shù)據(jù)請(qǐng)求:網(wǎng)絡(luò)管理模塊,提供 HTTP 數(shù)據(jù)請(qǐng)求能力,支持 GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT 請(qǐng)

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

    HarmonyOS鴻蒙應(yīng)用開(kāi)發(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日
    瀏覽(22)
  • 鴻蒙OS開(kāi)發(fā)實(shí)戰(zhàn):【網(wǎng)絡(luò)管理HTTP數(shù)據(jù)請(qǐng)求】

    鴻蒙OS開(kāi)發(fā)實(shí)戰(zhàn):【網(wǎng)絡(luò)管理HTTP數(shù)據(jù)請(qǐng)求】

    應(yīng)用通過(guò)HTTP發(fā)起一個(gè)數(shù)據(jù)請(qǐng)求,支持常見(jiàn)的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 HTTP數(shù)據(jù)請(qǐng)求功能主要由http模塊提供。 使用該功能需要申請(qǐng)ohos.permission.INTERNET權(quán)限。 涉及的接口如下表,具體的接口說(shuō)明請(qǐng)參考API文檔。 接口名 功能描述 createHttp() 創(chuàng)建一個(gè)ht

    2024年04月29日
    瀏覽(19)
  • 詳細(xì)教程 - 從零開(kāi)發(fā) Vue 鴻蒙harmonyOS應(yīng)用 第五節(jié) (基于uni-app封裝鴻蒙接口請(qǐng)求庫(kù))

    詳細(xì)教程 - 從零開(kāi)發(fā) Vue 鴻蒙harmonyOS應(yīng)用 第五節(jié) (基于uni-app封裝鴻蒙接口請(qǐng)求庫(kù))

    ??隨著鴻蒙系統(tǒng)的興起,越來(lái)越多的app會(huì)采用鴻蒙開(kāi)發(fā)。而鴻蒙開(kāi)發(fā)必不可少的就是調(diào)用各種接口服務(wù)。為了簡(jiǎn)化接口的調(diào)用流程,我們通常會(huì)做一層封裝。今天就來(lái)講解一下,如何用uni-app封裝鴻蒙的接口請(qǐng)求庫(kù)。 ??首先我們要新建一個(gè)鴻蒙項(xiàng)目啦!當(dāng)然選擇第一個(gè)空白項(xiàng)

    2024年02月02日
    瀏覽(25)
  • HarmonyOS ArkTS HTTP數(shù)據(jù)請(qǐng)求(九)

    HarmonyOS ArkTS HTTP數(shù)據(jù)請(qǐng)求(九)

    日常生活中我們使用應(yīng)用程序看新聞、發(fā)送消息等,都需要連接到互聯(lián)網(wǎng),從服務(wù)端獲取數(shù)據(jù)。例如,新聞應(yīng)用可以從新聞服務(wù)器中獲取最新的熱點(diǎn)新聞,從而給用戶打造更加豐富、更加實(shí)用的體驗(yàn)。 那么要實(shí)現(xiàn)這樣一種能實(shí)時(shí)從服務(wù)端獲取數(shù)據(jù)的場(chǎng)景,就依賴于HTTP數(shù)據(jù)請(qǐng)

    2024年02月03日
    瀏覽(29)
  • ESP32網(wǎng)絡(luò)開(kāi)發(fā)實(shí)例-HTTP-GET請(qǐng)求

    在本文中,我們將介紹如使用ESP32向 ThingSpeak 和 openweathermap.org 等常用 API 發(fā)出 HTTP GET 請(qǐng)求。 超文本傳輸協(xié)議 (HTTP) 用作服務(wù)器和客戶端之間的請(qǐng)求-響應(yīng)協(xié)議。 它使它們之間的通信順暢。 兩種最廣泛使用的 HTTP 方法是 GET 和 POST。 通過(guò) GET,從指定資源請(qǐng)求數(shù)據(jù),而 POST 發(fā)送數(shù)

    2024年02月08日
    瀏覽(20)
  • ESP32網(wǎng)絡(luò)開(kāi)發(fā)實(shí)例-HTTP-POST請(qǐng)求

    在本文中,我們將介紹如何使用 ESP32向 ThingSpeak等常用 API 發(fā)出 HTTP POST 請(qǐng)求。 超文本傳輸協(xié)議 (HTTP) 用作服務(wù)器和客戶端之間的請(qǐng)求-響應(yīng)協(xié)議。 它使它們之間的通信順暢。 兩種最廣泛使用的 HTTP 方法是 GET 和 POST。 通過(guò) GET,從指定資源請(qǐng)求數(shù)據(jù),而 POST 發(fā)送數(shù)據(jù)以創(chuàng)建資源

    2024年02月08日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包