Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中使用OkHttp包處理HTTP的get和post請求的方法

Android中使用OkHttp包處理HTTP的get和post請求的方法

編輯:關於Android編程

概覽
http是現在主流應用使用的網絡請求方式, 用來交換數據和內容, 有效的使用HTTP可以使你的APP 變的更快和減少流量的使用
OkHttp 是一個很棒HTTP客戶端(GitHub主頁:https://github.com/square/okhttp):

  • 支持SPDY, 可以合並多個到同一個主機的請求
  • 使用連接池技術減少請求的延遲(如果SPDY是可用的話)
  • 使用GZIP壓縮減少傳輸的數據量
  • 緩存響應避免重復的網絡請求

當你的網絡出現擁擠的時候,就是OKHttp 大顯身手的時候, 它可以避免常見的網絡問題,如果你的服務是部署在不同的IP上面的,如果第一個連接失敗, OkHTtp會嘗試其他的連接. 這個對現在IPv4+IPv6 中常見的把服務冗余部署在不同的數據中心上.  OkHttp 將使用現在TLS特性(SNI ALPN) 來初始化新的連接. 如果握手失敗, 將切換到SLLv3

使用OkHttp很容易,   同時支持 異步阻塞請求和回調.
如果你使用OkHttp ,你不用重寫你的代碼,   okhttp-urlconnection模塊實現了 java.net.HttpURLConnection 中的API,  okhttp-apache模塊實現了HttpClient中的API


GET 請求
我們從最簡單的 Http 請求開始學起,首先需要獲取一個 OkHttpClient 對象,方法如下:

OkHttpClient mHttpClient = new OkHttpClient();

OkHttpClient 用於管理所有的請求,內部支持並發,所以我們不必每次請求都創建一個 OkHttpClient 對象,這是非常耗費資源的。接下來就是創建一個 Request 對象了,如下所示:

Request request = new Request.Builder()
  .url("http://www.baidu.com")
  .build();

然後調用這個請求即可:

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());
  }
});

通過調用 newCall 方法傳入之前創建的 Request 對象,然後調用 enqueue() 方法開始異步請求,該方法需要傳入回調接口,用於響應成功和失敗的回調。
好了,就是這麼簡單,運行程序,Logcat 中打印如下數據:

2016713102858678.jpg (1697×397)

沒錯,這就是百度返回的 html 代碼,我們看起來很吃力,但是浏覽器就是根據這些代碼進行解析,然後將百度首頁顯示出來。
好了,最簡單的 http 請求已經完成了,實現這個功能大概有三步:
創建 OkHttpClient 對象
創建 Request 對象
將 Request 對象添加到 OkHttpClient 中,並傳入回調函數。


POST 請求
大家都知道 http 常用的請求分為 GET 和 POST 請求,剛才我們使用的明顯是一個 GET 請求,那麼,如何發起一個 POST 請求呢?其實很簡單,在第二步中有一個 post 方法,就可以傳入請求參數。
首先,創建一個 RequestBody 對象,這裡我們用它的一個子類 FormBody 創建一個表單數據參數,如下所示:

//表單數據
FormBody.Builder builder = new FormBody.Builder();
builder.add("xwdoor","xwdoor");
RequestBody formBody = builder.build();

然後以此構建 Request 對象,如下所示:

Request request = new Request.Builder()
  .url("http:www.baidu.com")
  .post(formBody)
  .build();

調用 post() 方法,將創建的 RequestBody 對象傳入即可。開始請求與前面講的 GET 請求一樣。實現 POST 請求大概分四步:

  • 創建 OkHttpClient 對象
  • 創建 RequestBody 對象
  • 創建 Request 對象

將 Request 對象添加到 OkHttpClient 中,並傳入回調函數。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved