框架下載地址:https://github.com/square/okhttpgit
今天給你們講解下網絡框架okhttp的使用,這個框架很是強大,不少框架都用它來加載網絡資源,目前不少開發者還在用AsyncHttp,這個庫如今已經不推薦使用了,Google已經去掉了httpclient,下面咱們就看一下okhttp的使用。github
首先在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();eclipse
new Thread(){異步
@Overrideide
public void run() {post
super.run();gradle
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","lidongcaiocc@163.com");
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壓縮減小傳輸的數據量,緩存響應避免重複的網絡請求、攔截器等等。