欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中使用OkHttp包處理HTTP的get和post請(qǐng)求的方法

 更新時(shí)間:2016年07月13日 10:35:09   作者:XWdoor  
OkHttp包為安卓開發(fā)中的HTTP協(xié)議網(wǎng)絡(luò)編程帶來了很大的便利,這里我們就來看一下最基本的、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ù):

2016713102858678.jpg (1697×397)

沒錯(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)文章

最新評(píng)論