1. 程式人生 > >okHttp使用及其優勢

okHttp使用及其優勢

最近okhttp網路請求比較火 ,本人在工作之餘也瞭解一下okhttp的特點及用法,希望對大家有用.

第一點:谷歌官方在6.0以後在android sdk已經移除了httpClient,加入我們okHttp.
第二點:okHttp支援SPDY(是谷歌開發的基於TCP的應用層協議,用於最小化網路延遲,提升網路速度,優化使用者的網路使用體驗. SPDY並不是一種替代http的協議,只是對http的一種增強.)允許連線在一主機的所有請求分享一個socket.如果SPDY不可用.會使用連線池來減少請求延遲.利用響應快取來避免重複的網路請求.即便是網路出現問題時,okhttp依然起作用.它將從常見的連結問題當中回覆.如果你的伺服器有多個IP地址,當地一個失敗時,okhttp會自動嘗試連線其他的地址.這對於IPV4和IPV6以及寄宿在多個數據中心的服務而言,是非常有必要的,所以okhttp的穩定性可以說是非常棒的.

第一點:谷歌官方在6.0以後在android 開啟已經移除了httpClient 加入了okHttp.

第三點:使用方式:

1.離線方式:

2. 新增依賴的方式;

1.通過maven倉庫搜尋下載okhttp.jar和okio.jar使用
2. gradle中加入`compile 'com.squareup.okhttp:okhttp:2.6.0'`即可
最常使用的get請求 同步請求:
//1.建立OkHttpClient例項物件
        OkHttpClient okHttpClient = new OkHttpClient();

//home
// ?index=0==>引數
String url = Constants.URLS.BASEURL + "home?index=0";
//2.建立一個請求
Request request = new Request.Builder()
        .get()//get方法
        .url(url)//對應的url
        .build();

//3.發起請求
Response response = okHttpClient.newCall(request).execute();

//4.取出結果
String resultJsonString = response.body().string();

 非同步的請求:
//1.建立OkHttpClient例項物件
        OkHttpClient okHttpClient = new OkHttpClient();

        //home
        // ?index=0==>引數
        String url = Constants.URLS.BASEURL + "home?index=0";
        //2.建立一個請求
        Request request = new Request.Builder()
                .get()//get方法
                .url(url)//對應的url
                .build();
//3.發起請求
okHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Request request, IOException e) {
        //請求成功
    }

    @Override
    public void onResponse(Response response) throws IOException {
        //請求失敗
    }
});
引數的拼接:訪問後臺伺服器 拼接相應的 引數.僅供參考
public static String getUrlParamsByMap(Map<String, Object> map) {
    if (map == null) {
        return "";
    }
    StringBuffer sb = new StringBuffer();
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        sb.append(entry.getKey() + "=" + entry.getValue());
        sb.append("&");
    }
    String s = sb.toString();
    if (s.endsWith("&")) {
        s = s.substring(0, s.length() - 1);
    }
    return s;
}