0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS開(kāi)發(fā)實(shí)例:【HarmonyHttpClient】網(wǎng)絡(luò)框架

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-12 16:58 ? 次閱讀

簡(jiǎn)介

鴻蒙上使用的Http網(wǎng)絡(luò)框架,里面包含純Java實(shí)現(xiàn)的HttpNet,類似okhttp使用,支持同步和異步兩種請(qǐng)求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優(yōu)雅使用注解、自動(dòng)解析json

很遺憾,目前沒(méi)能直接發(fā)布bintray,DevEco Studio上傳bintray,gradle安裝不通過(guò),所以如果要使用,clone下來(lái),引入module即可

HttpNet基本和進(jìn)階使用方式,可以進(jìn)行合適的封裝,簡(jiǎn)化請(qǐng)求邏輯

鴻蒙開(kāi)發(fā)文檔參考:[qr23.cn/AKFP8k]可以復(fù)制地址前往。

構(gòu)建GET請(qǐng)求:和okhttp類似

RequestParams params = new RequestParams()
                .put("userName","oscer")
                .put("pwd","oschina");

Request request = new Request.Builder().encode("UTF-8")
                .method("GET")
                .timeout(13000)
                .url("http://www.oschina.net")
                .build();

構(gòu)建POST請(qǐng)求:

//請(qǐng)求參數(shù)
RequestParams params = new RequestParams()
                .put("userName","oscer")
                .putFile("fileName","file")
                .put("pwd","oschina");
//請(qǐng)求對(duì)象
Request request = new Request.Builder()
                .encode("UTF-8")
                .method("POST")
                .params(params)
                .timeout(13000)
                .url("http://www.oschina.net")
                .build();

POST JSON 請(qǐng)求構(gòu)建:

Request request = new Request.Builder()
                .encode("UTF-8")
                .method("POST")
                .content(new JsonContent("json")
                .timeout(13000)
                .url("http://www.oschina.net")
                .build();

執(zhí)行請(qǐng)求:

//構(gòu)建Http客戶端,這里可以進(jìn)行全局static final
HttpNetClient client = new HttpNetClient();
client.setProxy("192.168.1.1",80);//您也可以開(kāi)啟該客戶端全局代理
client.addInterceptor(new Interceptor() {
            /* 攔截器在執(zhí)行請(qǐng)求前都會(huì)走到這一步,如果是同步的,就是當(dāng)前線程,如果是異步,就是子線程
            * 因此可以在這里動(dòng)態(tài)添加全局Cookie或其它Header之類的
            * 進(jìn)階使用:如果要求對(duì)所有接口Form表單進(jìn)行全局加密,也可以在這里執(zhí)行
            */
            @Override
            public void intercept(Request request) {
                Log.e("請(qǐng)求攔截器當(dāng)前線程: " + Thread.currentThread().getName() + "  --  " + request.url());

            }
        });
//執(zhí)行異步請(qǐng)求
client.newCall(request)
                //如果采用上傳文件方式,可以在這里開(kāi)啟上傳進(jìn)度監(jiān)控
                .intercept(new InterceptListener() {
                    @Override
                    public void onProgress(final int index, final long currentLength, final long totalLength) {
                        Log.e("當(dāng)前進(jìn)度", "  --  " + ((float) currentLength / totalLength) * 100);
                    }
                })
                .execute(new Callback() {
                    @Override
                    public void onResponse(Response response) {
                        String body = response.getBody();//getBody()和toStream()是互斥的
                        InputStream is = response.toStream();//如果采用下載,可以在這里監(jiān)聽(tīng)下載進(jìn)度
                    }

                    @Override
                    public void onFailure(Exception e) {
                        Log.e("onFailure " + e.getMessage());
                    }
                });

// 也可以在子線程中執(zhí)行同步請(qǐng)求,如果有幾個(gè)接口需要進(jìn)行順序請(qǐng)求,此方法最佳
try {
     Response response = client.newCall(request).execute();
     String body = response.getBody();
}catch (Exception e){
      e.printStackTrace();
}

Retrofit使用方式,底層網(wǎng)絡(luò)實(shí)現(xiàn)基于前面的 HttpNetClient,基于運(yùn)行時(shí)注解添加請(qǐng)求配置,UI切換使用鴻蒙EventHandler

// 構(gòu)建請(qǐng)求java接口,采用動(dòng)態(tài)代理+注解實(shí)現(xiàn),服務(wù)器返回什么,Call< 服務(wù)器返回json對(duì)應(yīng)的Java bean >即可
public interface LoginService {

    //普通POST,方法名添加請(qǐng)求方法注解POST、GET、DELETE、Header等,方法參數(shù)添加Form表單注解
    @Headers({"Cookie:cid=adcdefg;"})//靜態(tài)Header
    @POST("api/users/login")
    Call

搜狗高速瀏覽器截圖20240326151344.png

執(zhí)行請(qǐng)求

public static final String API = "http://www.oschina.net/";
public static Retrofit retrofit = new Retrofit();
retrofit.registerApi(API);//注冊(cè)api

//進(jìn)階使用,假設(shè)服務(wù)器返回來(lái)的json內(nèi)容是aes加密的,那么可以添加轉(zhuǎn)化器,攔截響應(yīng),aes解密后再返回,此方法一定在子線程執(zhí)行,直接執(zhí)行耗時(shí)操作
retrofit.setConverterFactory(new ConverterFactory() {
            @Override
            public void convert(com.haibin.retrofit.Response response) {
                response.setBodyString("{json}");//攔截響應(yīng)數(shù)據(jù),修改內(nèi)容,如aes解密后再返回
                Log.e("響應(yīng)轉(zhuǎn)換器當(dāng)前線程: " + Thread.currentThread().getName());
            }
        });

//執(zhí)行異步請(qǐng)求,異步請(qǐng)求可以直接在UI線程執(zhí)行
retrofit.from(LoginService.class)
         .login("xxx@qq.com", "123456", 2, 2);
         .withHeaders(Headers...)//動(dòng)態(tài)添加某些Header
         .execute(new Callback

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17489
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4396
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    初識(shí)鴻蒙OS

    1.0版本的設(shè)計(jì)和開(kāi)發(fā);2018年,華為公司完成了鴻蒙內(nèi)核2.0版本的設(shè)計(jì)和研發(fā);2019年,華為的智慧屏率先搭載鴻蒙操作系統(tǒng);2020年9月11日,華為正式發(fā)布鴻蒙操作系統(tǒng),并舉行
    發(fā)表于 09-10 15:28

    鴻蒙OS應(yīng)用程序開(kāi)發(fā)

    這份學(xué)習(xí)文檔主要是帶領(lǐng)大家在鴻蒙OS上學(xué)習(xí)開(kāi)發(fā)一個(gè)應(yīng)用程序,主要知識(shí)點(diǎn)如下:1、U-Boot引導(dǎo)文件燒寫方式;2、內(nèi)核鏡像燒寫方式;3、鏡像運(yùn)行。
    發(fā)表于 09-11 14:39

    鴻蒙os系統(tǒng)是什么意思 鴻蒙os系統(tǒng)有什么作用

    毫秒級(jí)。鴻蒙OS實(shí)現(xiàn)模塊化耦合,對(duì)應(yīng)不同設(shè)備可彈性部署,鴻蒙OS有三層架構(gòu),第一層是內(nèi)核,第二層是基礎(chǔ)服務(wù),第三層是程序框架,可用于手機(jī)、平
    發(fā)表于 12-17 11:34

    鴻蒙應(yīng)用開(kāi)發(fā)的JS UI框架如何實(shí)現(xiàn)高德地圖的訪問(wèn)?

    鴻蒙應(yīng)用,現(xiàn)在分為Java UI框架和Ark UI框架,其中JS UI開(kāi)發(fā)框架Ark UI框架
    發(fā)表于 04-28 11:44

    鴻蒙 OS 應(yīng)用開(kāi)發(fā)初體驗(yàn)

    的操作系統(tǒng)平臺(tái)和開(kāi)發(fā)框架。HarmonyOS 的目標(biāo)是實(shí)現(xiàn)跨設(shè)備的無(wú)縫協(xié)同和高性能。 DevEco Studio 對(duì)標(biāo) Android Studio,開(kāi)發(fā)鴻蒙
    發(fā)表于 11-02 19:38

    嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開(kāi)發(fā)—ARM與uC/OS-Ⅱ

    嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開(kāi)發(fā) ——ARM與uC/OS-Ⅱ
    發(fā)表于 11-08 17:32 ?0次下載

    鴻蒙OS初心是面向IoT,IoT系統(tǒng)碎片化才是鴻蒙需解決的關(guān)鍵問(wèn)題

    副總裁楊海松說(shuō),“既然我們已經(jīng)做出了開(kāi)發(fā)者Beta版,這說(shuō)明我們已經(jīng)準(zhǔn)備好了?!?此次華為主要介紹了鴻蒙OS 2.0會(huì)向開(kāi)發(fā)者提供的三個(gè)核心能力:分布式的編程
    的頭像 發(fā)表于 12-16 14:42 ?2235次閱讀

    華為鴻蒙OS 2.0帶來(lái)哪些智慧體驗(yàn)?

    華為已經(jīng)定于12月16日在北京發(fā)布鴻蒙OS 2.0手機(jī)開(kāi)發(fā)者Beta版本。這不僅是手機(jī)鴻蒙OS的首次亮相,同時(shí)也意味著手機(jī)
    的頭像 發(fā)表于 12-15 15:10 ?2084次閱讀

    鴻蒙OS 2.0手機(jī)開(kāi)發(fā)者Beta版發(fā)布會(huì)在京舉辦

    三個(gè)月前,鴻蒙OS 2.0正式在華為開(kāi)發(fā)者大會(huì)2020亮相。12月16日,鴻蒙OS 2.0手機(jī)開(kāi)發(fā)
    的頭像 發(fā)表于 12-16 09:29 ?1.9w次閱讀

    華為正式推出鴻蒙OS的手機(jī)開(kāi)發(fā)者Beta版

    12月16日上午消息,華為今日宣布正式推出鴻蒙OS的手機(jī)開(kāi)發(fā)者Beta版,華為消費(fèi)者業(yè)務(wù)軟件部總裁王成錄表示,今年已有美的、九陽(yáng)、老板電器、海雀科技搭載鴻蒙
    的頭像 發(fā)表于 12-16 10:37 ?2622次閱讀

    華為發(fā)布鴻蒙OS Beta版

    昨天華為發(fā)布鴻蒙OS Beta版了?鴻蒙系統(tǒng)一直在按照既有步伐前進(jìn),現(xiàn)在華為發(fā)布鴻蒙OS Beta版,而且一些生態(tài)
    的頭像 發(fā)表于 12-17 08:41 ?2879次閱讀

    鴻蒙OS與Lite OS的區(qū)別是什么

    鴻蒙OS鴻蒙OS面向未來(lái)、面向全場(chǎng)景、分布式。在單設(shè)備系統(tǒng)能力基礎(chǔ)上,鴻蒙OS提出了基于同一套系
    的頭像 發(fā)表于 12-24 12:40 ?5010次閱讀

    鴻蒙os怎么升級(jí)

    6月2日,華為正式發(fā)布了鴻蒙armonyOS 2系統(tǒng),那么鴻蒙os如何升級(jí)?現(xiàn)將鴻蒙os升級(jí)方式告知如下。
    的頭像 發(fā)表于 06-08 16:26 ?2733次閱讀

    鴻蒙os2.0系統(tǒng)官網(wǎng)

    的全新芯片,更多個(gè)性化操作的推出會(huì)讓用戶們更加舒適的使用鴻蒙2.0系統(tǒng)。 鴻蒙2.0系統(tǒng)介紹:DFX 鴻蒙os2.0系統(tǒng)官網(wǎng)下載,為不同的硬件架構(gòu)和資源提供了基于組件和可定制的DFX
    的頭像 發(fā)表于 06-21 20:32 ?1w次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>os</b>2.0系統(tǒng)官網(wǎng)

    華為開(kāi)發(fā)者大會(huì)2021鴻蒙os在哪場(chǎng)

    華為開(kāi)發(fā)者大會(huì)2021將在10月22日-24日舉辦,地點(diǎn)為東莞松山湖,鴻蒙os 3.0或?qū)⑴c我們見(jiàn)面,那么華為開(kāi)發(fā)者大會(huì)2021鴻蒙
    的頭像 發(fā)表于 10-22 15:24 ?1907次閱讀