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