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)求
我們從最簡(jiǎn)單的 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)。
好了,就是這么簡(jiǎn)單,運(yùn)行程序,Logcat 中打印如下數(shù)據(jù):

沒錯(cuò),這就是百度返回的 html 代碼,我們看起來很吃力,但是瀏覽器就是根據(jù)這些代碼進(jìn)行解析,然后將百度首頁顯示出來。
好了,最簡(jiǎ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í)很簡(jiǎn)單,在第二步中有一個(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)文章
android Matrix實(shí)現(xiàn)圖片隨意放大縮小或拖動(dòng)
這篇文章主要為大家詳細(xì)介紹了android Matrix實(shí)現(xiàn)圖片隨意放大縮小或拖動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Diycode開源項(xiàng)目實(shí)例搭建上拉加載和下拉刷新的Fragment
這篇文章主要介紹了Diycode開源項(xiàng)目實(shí)例搭建上拉加載和下拉刷新的Fragment以及相關(guān)的代碼分享。2017-11-11
Android之RecycleView實(shí)現(xiàn)指定范圍的拖動(dòng)效果
這篇文章主要介紹了Android之RecycleView實(shí)現(xiàn)指定范圍的拖動(dòng)效果的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Android自定義Scrollbar的兩種實(shí)現(xiàn)方式
本文介紹兩種實(shí)現(xiàn)自定義滾動(dòng)條的方法,分別通過ItemDecoration方案和獨(dú)立View方案實(shí)現(xiàn)滾動(dòng)條定制化,文章通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-03-03
Android實(shí)現(xiàn)瘋狂連連看游戲之加載界面圖片和實(shí)現(xiàn)游戲Activity(四)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之加載界面圖片和實(shí)現(xiàn)游戲Activity,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android拍照保存在系統(tǒng)相冊(cè)不顯示的問題解決方法
我們保存相冊(cè)到Android手機(jī)的時(shí)候,然后去打開系統(tǒng)圖庫(kù)找不到我們想要的那張圖片,那是因?yàn)槲覀儾迦氲膱D片還沒有更新的緣故,下面與大家分享下此問題的解決方法2013-06-06
Android?Flutter實(shí)現(xiàn)頁面切換轉(zhuǎn)場(chǎng)動(dòng)畫效果
Hero組件非常適合從列表、概覽頁切換到詳情頁轉(zhuǎn)場(chǎng)動(dòng)畫場(chǎng)合。本文將利用Hero組件制作一個(gè)簡(jiǎn)單的頁面切換轉(zhuǎn)場(chǎng)動(dòng)畫效果,感興趣的可以了解一下2022-06-06
Android 獲取系統(tǒng)語言的實(shí)例(兼容7.0)
下面小編就為大家?guī)硪黄狝ndroid 獲取系統(tǒng)語言的實(shí)例(兼容7.0)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05

