1. 程式人生 > >深入瞭解OKHttp(一:原生OKHttp的基本使用)

深入瞭解OKHttp(一:原生OKHttp的基本使用)

1.1_簡介

OKHttp是一款高效的HTTP客戶端,支援連線同一地址的連結共享同一個socket,通過連線池來減小響應延遲,還有透明的GZIP壓縮,請求快取等優勢,其核心主要有路由、連線協議、攔截器、代理、安全性認證、連線池以及網路適配,攔截器主要是指新增,移除或者轉換請求或者回應的頭部資訊


這個庫也是square開源的一個網路請求庫(okhttp內部依賴okio)。現在已被Google使用在Android原始碼上了,可見其強大。

關於網路請求庫,現在應該還有很多人在使用android-async-http。他內部使用的是HttpClient,但是Google在6.0版本里面刪除了HttpClient相關API,可見這個庫現在有點過時了。

1.2_下載地址

1.3_OKHttp主要功能

1、聯網請求文字資料
2、大檔案下載
3、大檔案上傳
4、請求圖片

2_原生OKHttpGetPost請求小案例

UI執行緒接受顯示請求資料
private OkHttpClient client = new OkHttpClient();

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case GET:
                    //獲取資料
                    tv_result.setText((String) msg.obj);
                    break;
                case POST:
                    //獲取資料
                    tv_result.setText((String) msg.obj);
                    break;
            }
        }
    };

get與post 非同步請求資料

 /**
     * 使用get請求網路資料
     */
    private void getDataFromGet() {
        new Thread() {
            @Override
            public void run() {
                super.run();

                try {
                    String result = get("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
                    Log.e("TAG", result);
                    Message msg = Message.obtain();
                    msg.what = GET;
                    msg.obj = result;
                    handler.sendMessage(msg);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();

    }


    /**
     * 使用post請求網路資料
     */
    private void getDataFromPost() {
        new Thread() {
            @Override
            public void run() {
                super.run();

                try {
                    String result = post("http://api.m.mtime.cn/PageSubArea/TrailerList.api", "");
                    Log.e("TAG", result);
                    Message msg = Message.obtain();
                    msg.what = POST;
                    msg.obj = result;
                    handler.sendMessage(msg);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();

    }


    /**
     * get請求
     *
     * @param url 網路連線
     * @return
     * @throws IOException
     */
    private String get(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }


    /**
     * okhttp3的post請求
     *
     * @param url
     * @param json
     * @return
     * @throws IOException
     */
    private String post(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }

相關推薦

深入瞭解OKHttp原生OKHttp基本使用

1.1_簡介 OKHttp是一款高效的HTTP客戶端,支援連線同一地址的連結共享同一個socket,通過連線池來減小響應延遲,還有透明的GZIP壓縮,請求快取等優勢,其核心主要有路由、連線協議、攔截器、代理、安全性認證、連線池以及網路適配,攔截器主要是指新增,移除或者轉換請求

深入瞭解Linux

Linux的各個資料夾 每次當我使用linux的時候我都被一個個資料夾整懵逼,那麼多資料夾到底是怎麼分類的呢。今天終於有時間好好整理一下 /boot: 引導檔案存放目錄,核心檔案(vmlinuz),引導載入器(bootloader grub)都存放在這個目錄 /bin: 供所有使用者使用的基本命令

深入理解jvm、ubuntu16編譯openjdk8

1.安裝Bootstrap JDK 直接執行命令: sudo apt-get install openjdk-7-jre sudo apt-get install openjdk-7-jdk 如果出現“沒有可用的軟體包 openjdk-7-jdk,但是它被其它的軟體包引用了。這可能意味著

深入理解overlayfs初識

Overlayfs是一種類似aufs的一種堆疊檔案系統,於2014年正式合入Linux-3.18主線核心,目前其功能已經基本穩定(雖然還存在一些特性尚未實現)且被逐漸推廣,特別在容器技術中更是勢頭難擋。本系列博文將首先介紹overlayfs的基本概念和應用場景,然後通過若干例項描述它的使用方式,

深入理解AndroidGradle詳解

作者 鄧凡平 編者按:隨著移動裝置硬體能力的提升,Android系統開放的特質開始顯現,各種開發的奇技淫巧、黑科技不斷湧現,InfoQ特聯合《深入理解Android》系列圖書作者鄧凡平,開設深入理解Android專欄,探索Android從框架到應用開

根據Interceptor 分析 OkHttp

在介紹Interceptor前需要理解幾個概念 Requests 每個HTTP請求都包含一個URL,一個method(比如GET/POST),還有一系列的headers。Requests 還可能包含一個body:一個指定conten

深入瞭解資料校驗Bean Validation 2.0JSR380

每篇一句 > 吾皇一日不退役,爾等都是臣子 對Spring感興趣可掃碼加入wx群:`Java高工、架構師3群`(文末有二維碼) 前言 前幾篇文章在講Spring的資料繫結的時候,多次提到過資料校驗。可能有人認為資料校驗模組並不是那麼的重要,因為硬編碼都可以做。若是這麼想的話,那就大錯特錯了~ 前面講解

深入瞭解資料校驗Java Bean Validation 2.0JSR380

每篇一句 吾皇一日不退役,爾等都是臣子 相關閱讀 【小家Java】深入瞭解資料校驗(Bean Validation):基礎類打點(ValidationProvider、ConstraintDescriptor、ConstraintValidator) 對Spring感興趣可掃碼加入wx群:`Java高工

安卓JNI精細化講解,讓你徹底瞭解JNI環境搭建與HelloWord

目錄 1、基礎概念 ├──1.1、JNI ├──1.2、NDK ├──1.3、CMake與ndk-build 2、環境搭建 3、Native C++ 專案(HelloWord案例) ├── 3.1、專案建立(java、kotlin) ├── 3.2、CMake的應用(詳細講解) ├── 3.3、ndk-bui

深入理解pythonpython語法總結基礎知識和對python中物件的理解

用python也用了兩年了,趁這次疫情想好好整理下。 大概想法是先對python一些知識點進行總結,之後就是根據python核心原始碼來對python的實現方式進行學習,不會閱讀整個原始碼,,,但是應該會把資料結構的實現、函式呼叫過程、以及python虛擬機器的基本原理根據原始碼解釋下。 當然限於筆者只是一個

使用SLF4J和LOGBACK 基本使用

asi 個人 fig 接口實現 pac 再次 intro 級別 多說 1.SLF4J是什麽? slf4j是一個日誌門面,它不是具體的日誌實現框架,而是提供了通用的日誌接口,按個人理解來說,是通過接口實現多態,來滿足應用在不同日誌框架間切換的需求。 例如在程序中我們需要記錄

深入理解JavaScript

odi 可能 方式 == tin mini 單詞 包括 fun 編寫高質量 JavaScript 代碼的基本要點 轉載:http://wiki.jikexueyuan.com/project/javascript-depth-understanding/start-jav

字符驅動之按鍵無腦輪詢法

des gpo first gist 結構體 字符 定義 char v_op 一、添加頭文件 二、構造fileoperation結構體 static struct fileoperations second_drv_fops = {   .o

node總結之全域性物件瞭解

JavaScript 中有一個特殊的物件,稱為全域性物件(Global Object),它及其所有屬性都可以在程式的任何地方訪問,這就是全域性變數,在瀏覽器 JavaScript 中,通常 window 是全域性物件, 然而 Node.js 中的全域性物件是 global,所有全域性變數(除了

簡單直播實現建立本地rtmp伺服器Mac上搭建直播伺服器Nginx+rtmp

簡介 nginx是非常優秀的開源伺服器,用它來做hls或者rtmp流媒體伺服器是非常不錯的選擇,本人在網上整理了安裝流程,分享給大家並且作備忘。 步驟安裝 1、安裝Homebrow Homebrew簡稱brew,是Mac OSX上的軟體包管理工具,能在Mac中方便的安裝軟體

想高效開發小程式,mpvue瞭解

序言 小程式一定是今年熱門話題之一,對於我們開發者來講,開發小程式也是屬於我們的技能之一了。從去年我也玩過小程式,但當時處於內測的階段,各種反人類的設計都有,連es6都不支援,只能說瞎折騰了。到了如今,小程式迎來春天,友好度提高了不少,wepy、taro與mpvue的出現也帶來更高的開發

Elasticsearch入門Elasticsearch的基本概念

一.Elasticsearch定義 Elasticsearch是一個開源的高度可擴充套件的全文搜尋和分析引擎。它允許您快速、實時的儲存、搜尋和分析大資料。它通常為具有複雜的搜尋特性和需求的應用提供底層引擎或技術。 Elasticsearch可以用於以下的一些場景: 運營一個網上商城

Android 如何從應用深入到Framework

今天,明哥想跟大家聊聊,如何從應用開發,轉向Framework開發。 系統應用開發,現在來說,已經開始脫離系統,單獨拿出來開發,系統定製介面,已提供給應用呼叫,用來增強功能。 原生的桌面,撥號,設定,已經沒法做出差異化優勢,因此都費盡心機,來進行應用深度開發。 對於之前

《Java8實戰》-第十章筆記CompletableFuture組合式非同步程式設計

CompletableFuture:組合式非同步程式設計 最近這些年,兩種趨勢不斷地推動我們反思我們設計軟體的方式。第一種趨勢和應用執行的硬體平臺相關,第二種趨勢與應用程式的架構相關,尤其是它們之間如何互動。我們在第7章中已經討論過硬體平臺的影響。我們注意到隨著多核處理器的出現,提升應用程式處理速度最有效的

js將串隨機數字每四位加一個自定義符號格式1234-5678-90

方法一:      let string = '1234567890',result = '', index = 0; for(let i=0; i<string.length; i++){      result +=