1. 程式人生 > >okhttp3.4用法全解析,追趕okhttp的更新步伐

okhttp3.4用法全解析,追趕okhttp的更新步伐

前言

第一次用okhttp的時候的版本號是2.x,當時看到github上也是2.x的版本,但現在重新去用okhttp的時候,發現有很多都不一樣了,這裡記錄一下okhttp的一些用法,以及遇到困難時的解決辦法

1.okhttp3的基本用法

1. 基本的配置

compile 'com.squareup.okhttp3:okhttp:+'

注意,這裡使用的是最新版本的okhttp,我們就是要追趕人家的開發步伐
如果你想就用一個的話,下面是

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

新增許可權:

    <uses-permission
android:name="android.permission.INTERNET"/> //下面這些事使用到快取的時候需要用的 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
/>

2.普通的get和post的方法

//普通的非同步的get請求
        Request request = new Request.Builder()
                .url("http://apis.baidu.com/heweather/weather/free?city=beijing")
                .method("GET", null)//這行可省略
                .header("apikey", CONSTS.apikey)
                .build();

        okHttpClient.newCall(request).enqueue(new
Callback() { @Override public void onFailure(Call call, IOException e) { Toast.makeText(getApplicationContext(), "請求失敗", Toast.LENGTH_SHORT).show(); } @Override public void onResponse(Call call, Response response) throws IOException { //這裡咱們先不講快取,到後面再講 str = response.toString()+"\n"+response.headers()+"\n"+response.body().string(); Log.i("response", str + ""); //回撥不是在主執行緒,所以更新ui需要到主執行緒 runOnUiThread(new Runnable() { @Override public void run() { text.setText(str+""); } }); } });

普通的post表單請求

  //非同步post
    public void POST(View view) {
        //新增表單內容
        RequestBody formBody = new FormBody.Builder()
                .add("city", "beijing")
                .build();

        //多項內容,這個是傳多種引數的的
        RequestBody multiformBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("title", "Square Logo")
                .addFormDataPart("image", "logo-square.png",
                        RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
                .build();


        Request request = new Request.Builder()
                .url("http://apis.baidu.com/heweather/weather/free")
                .header("apikey", CONSTS.apikey)
                .post(formBody)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                str = response.toString()+"\n"+response.headers()+"\n"+response.body().string();
                Log.i("response", str + "");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        text.setText(str+"");
                    }
                });
            }
        });


    }

在這裡請注意,get請求和2.x的內容變化不是很大,post內容的時候新增屬性值的時候引數變了,OkHttp3非同步POST請求和OkHttp2.x有一些差別就是沒有FormEncodingBuilder這個類,替代它的是功能更加強大的FormBodyMultipartBody,這兩個的類的用法都是builder,和Request的用法相似

3. 上傳檔案

。。。

4.下載檔案

。。。

2.okhttp3的進階用法

1. okhttp的快取如何實現

2. 如何與Retrofit2結合