Android中使用OkHttp包處理HTTP的get和post請(qǐng)求的方法
概覽
http是現(xiàn)在主流應(yīng)用使用的網(wǎng)絡(luò)請(qǐng)求方式, 用來交換數(shù)據(jù)和內(nèi)容, 有效的使用HTTP可以使你的APP 變的更快和減少流量的使用
OkHttp 是一個(gè)很棒HTTP客戶端(GitHub主頁:https://github.com/square/okhttp):
- 支持SPDY, 可以合并多個(gè)到同一個(gè)主機(jī)的請(qǐng)求
- 使用連接池技術(shù)減少請(qǐng)求的延遲(如果SPDY是可用的話)
- 使用GZIP壓縮減少傳輸?shù)臄?shù)據(jù)量
- 緩存響應(yīng)避免重復(fù)的網(wǎng)絡(luò)請(qǐng)求
當(dāng)你的網(wǎng)絡(luò)出現(xiàn)擁擠的時(shí)候,就是OKHttp 大顯身手的時(shí)候, 它可以避免常見的網(wǎng)絡(luò)問題,如果你的服務(wù)是部署在不同的IP上面的,如果第一個(gè)連接失敗, OkHTtp會(huì)嘗試其他的連接. 這個(gè)對(duì)現(xiàn)在IPv4+IPv6 中常見的把服務(wù)冗余部署在不同的數(shù)據(jù)中心上. OkHttp 將使用現(xiàn)在TLS特性(SNI ALPN) 來初始化新的連接. 如果握手失敗, 將切換到SLLv3
使用OkHttp很容易, 同時(shí)支持 異步阻塞請(qǐng)求和回調(diào).
如果你使用OkHttp ,你不用重寫你的代碼, okhttp-urlconnection模塊實(shí)現(xiàn)了 java.net.HttpURLConnection 中的API, okhttp-apache模塊實(shí)現(xiàn)了HttpClient中的API
GET 請(qǐng)求
我們從最簡單的 Http 請(qǐng)求開始學(xué)起,首先需要獲取一個(gè) OkHttpClient 對(duì)象,方法如下:
OkHttpClient mHttpClient = new OkHttpClient();
OkHttpClient 用于管理所有的請(qǐng)求,內(nèi)部支持并發(fā),所以我們不必每次請(qǐng)求都創(chuàng)建一個(gè) OkHttpClient 對(duì)象,這是非常耗費(fèi)資源的。接下來就是創(chuàng)建一個(gè) Request 對(duì)象了,如下所示:
Request request = new Request.Builder() .url("http://www.baidu.com") .build();
然后調(diào)用這個(gè)請(qǐng)求即可:
mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { Logger.t("123123").i(response.body().string()); } });
通過調(diào)用 newCall 方法傳入之前創(chuàng)建的 Request 對(duì)象,然后調(diào)用 enqueue() 方法開始異步請(qǐng)求,該方法需要傳入回調(diào)接口,用于響應(yīng)成功和失敗的回調(diào)。
好了,就是這么簡單,運(yùn)行程序,Logcat 中打印如下數(shù)據(jù):
沒錯(cuò),這就是百度返回的 html 代碼,我們看起來很吃力,但是瀏覽器就是根據(jù)這些代碼進(jìn)行解析,然后將百度首頁顯示出來。
好了,最簡單的 http 請(qǐng)求已經(jīng)完成了,實(shí)現(xiàn)這個(gè)功能大概有三步:
創(chuàng)建 OkHttpClient 對(duì)象
創(chuàng)建 Request 對(duì)象
將 Request 對(duì)象添加到 OkHttpClient 中,并傳入回調(diào)函數(shù)。
POST 請(qǐng)求
大家都知道 http 常用的請(qǐng)求分為 GET 和 POST 請(qǐng)求,剛才我們使用的明顯是一個(gè) GET 請(qǐng)求,那么,如何發(fā)起一個(gè) POST 請(qǐng)求呢?其實(shí)很簡單,在第二步中有一個(gè) post 方法,就可以傳入請(qǐng)求參數(shù)。
首先,創(chuàng)建一個(gè) RequestBody 對(duì)象,這里我們用它的一個(gè)子類 FormBody 創(chuàng)建一個(gè)表單數(shù)據(jù)參數(shù),如下所示:
//表單數(shù)據(jù) FormBody.Builder builder = new FormBody.Builder(); builder.add("xwdoor","xwdoor"); RequestBody formBody = builder.build();
然后以此構(gòu)建 Request 對(duì)象,如下所示:
Request request = new Request.Builder() .url("http:www.baidu.com") .post(formBody) .build();
調(diào)用 post() 方法,將創(chuàng)建的 RequestBody 對(duì)象傳入即可。開始請(qǐng)求與前面講的 GET 請(qǐng)求一樣。實(shí)現(xiàn) POST 請(qǐng)求大概分四步:
- 創(chuàng)建 OkHttpClient 對(duì)象
- 創(chuàng)建 RequestBody 對(duì)象
- 創(chuàng)建 Request 對(duì)象
將 Request 對(duì)象添加到 OkHttpClient 中,并傳入回調(diào)函數(shù)。
相關(guān)文章
詳解Matisse與Glide--java.lang.NoSuchMethodError:com.bumptech.gl
這篇文章主要介紹了在使用Matisse與glide4.0.0以及4.0.0之后的版本過程中,碰到該問題java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load的解決方法2021-08-08Android Studio下添加assets目錄的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狝ndroid Studio下添加assets目錄的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03Android實(shí)現(xiàn)流動(dòng)的漸變色邊框效果
本文將帶大家學(xué)習(xí)一下如何利用toast中的motion_toast組件實(shí)現(xiàn)一個(gè)流動(dòng)的漸變色邊框效果,文中的示例代碼講解詳細(xì),快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Android 6.0權(quán)限請(qǐng)求相關(guān)及權(quán)限分組方法
今天小編就為大家分享一篇Android 6.0權(quán)限請(qǐng)求相關(guān)及權(quán)限分組方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08Android隱藏標(biāo)題欄及解決啟動(dòng)閃過標(biāo)題的實(shí)例詳解
這篇文章主要介紹了Android隱藏標(biāo)題欄及解決啟動(dòng)閃過標(biāo)題的實(shí)例詳解的相關(guān)資料,這里提供兩種方法幫助大家解決這種問題,需要的朋友可以參考下2017-09-09Android自定義Toast樣式實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Android自定義Toast樣式,Toast是一種很方便的消息提示框,會(huì)在 屏幕中顯示一個(gè)消息提示框,沒任何按鈕,也不會(huì)獲得焦點(diǎn)一段時(shí)間過后自動(dòng)消失!非常常用!本文就來通過一個(gè)例子把Toast的使用講透2023-01-01