Android中okhttp的使用

來源:互聯網
上載者:User

標籤:

      架構:https://github.com/square/okhttp

      今天給大家講解下網路架構okhttp的使用,這個架構非常強大,很多架構都用它來載入網路資源,目前很多開發人員還在用AsyncHttp,這個庫現在已經不推薦使用了,Google已經去掉了httpclient,下面我們就看一下okhttp的使用。

      首先在build.gradle檔案中,添加庫並同步,如果是eclipse使用者就要下載jar包匯入libs即可

compile ‘com.squareup.okhttp3:okhttp:3.4.1‘

OkHttpClient httpClient = new OkHttpClient();

Request request = new Request.Builder().url(weather_url).build();

new Thread(){

    @Override

    public void run() {

        super.run();

        try {

            Response response = httpClient.newCall(request).execute();

            final String body = response.body().string();

            runOnUiThread(new Runnable() {

                @Override

                public void run() {

                    setView(body);

                }

            });

 

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}.start(); 

基本使用還是比較簡潔的

//執行個體一個okhttp對象

//建造一個請求參數,這裡可以構造url,head,method等等各種請求參數的設定

//get和post也是在這裡體現的,以上為get請求,預設為null,大家都懂得,看源碼

public Builder get() {

  return method("GET", null);

}

      注意這裡需要開啟線程發送請求,返回response,然後需要在主線程更新UI

      還可以使用回調call這樣請求,但是要注意,這裡僅僅是子線程非同步回調,也就是說更新UI依然要用Handler或者使用runOnUiThread方法。 

 httpClient.newCall(request).enqueue(new Callback() {

     @Override

     public void onFailure(Call call, IOException e) {

     }

     @Override

     public void onResponse(Call call, Response response) throws IOException {

             final String body = response.body().string();

             runOnUiThread(new Runnable() {

                 @Override

                 public void run() {

                     setView(body);

                 }

             });

     }

 });

      以上為get請求的使用,如果是post請求,攜帶參數,僅僅是request構造不同而已,其它一樣,下面是方法:

FormBody.Builder builder = new FormBody.Builder();

builder.add("username","dongcai");

builder.add("e_mail","[email protected]");

FormBody build = builder.build();

final Request request = new Request.Builder().url(weather_url).post(build).build();

      這裡要說明的是,post要的參數是RequestBody,這是個抽象類別,裡面封裝支援各種資料表單等,非常強大。我們找到它的實現子類

public final class FormBody extends RequestBody  

      FormBody 這裡封裝了請求參數集合的方法,需要使用Builder類來添加請求參數,然後構造FormBody對象,發送post請求。在這裡還可以設定編碼方式

public Builder add(String name, String value) {

  names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, false, false, true, true));

  values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, false, false, true, true));

  return this;

}

public Builder addEncoded(String name, String value) {

  names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, true, false, true, true));

  values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, true, false, true, true));

  return this;

}

      以上是本人蔘考文檔和源碼總結下基本的使用方法,相對於AsyncHttp、volley,恐怕最大的不足就是更新UI,okhttp不太方便,訊息回來需要自己寫主線程。但是okhttp支援SPDY, 可以合并多個到同一個主機的請,使用串連池技術減少請求的延遲(如果SPDY是可用的話) ,使用GZIP壓縮減少傳輸的資料量,緩衝響應避免重複的網路請求、攔截器等等。

 

Android中okhttp的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.