Okhttp3-基本用法

前言

Okhttp官網
Okhttp-Github

android網絡框架之OKhttp一個處理網絡請求的開源項目,是安卓端最火熱的輕量級框架,由移動支付Square公司貢獻(該公司還貢獻了Picasso)

用於替代HttpUrlConnection和Apache HttpClient(android API23 6.0裏已移除HttpClient)

官網的解釋如下:

基本用法

1.集成
1.1.依賴
   implementation 'com.squareup.okhttp3:okhttp:3.11.0'

可以去Okhttp-Github 查看並依賴最新的版本。

1.2權限

添加網絡權限

  <uses-permission android:name="android.permission.INTERNET" />
2.使用
2.1 同步GET請求
  • 構建OkHttpClient對象
  • 構建Request對象
  • 構建Call對象並通過execute()方法來執行同步Get請求
 //同步請求
        OkHttpClient okHttpClient=new OkHttpClient();
        final Request request=new Request.Builder()
                .url("https://www.wanandroid.com/navi/json")
                .get()
                .build();
        final Call call = okHttpClient.newCall(request);
        try {
            Response response = call.execute();
            Log.e("同步結果----   ",response.body().string()+"");

        } catch (IOException e) {

            e.printStackTrace();

        }

運行後發現報錯:

 android.os.NetworkOnMainThreadException

在Android4.0以後,會發現,只要是寫在主線程(就是Activity)中的HTTP請求,運行時都會報錯,這是因爲Android在4.0以後爲了防止應用的ANR(Aplication Not Response)異常。解決方法就是在子線程中運行:

        //同步請求
        OkHttpClient okHttpClient=new OkHttpClient();
        final Request request=new Request.Builder()
                .url("https://www.wanandroid.com/navi/json")
                .get()
                .build();
        final Call call = okHttpClient.newCall(request);

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Response response = call.execute();
                    Log.e("同步結果----   ",response.body().string()+"");

                } catch (IOException e) {

                    e.printStackTrace();

                }
            }
        }).start();
2.2 異步GET請求
   //異步請求
        OkHttpClient okHttpClient=new OkHttpClient();
        final Request request=new Request.Builder()
                .url("https://www.wanandroid.com/navi/json")
                .get()
                .build();
        final Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("okhttp_error",e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Gson gson=new Gson();

                Log.d("okhttp_success",response.body().string());
            }
        });
2.3 POST請求

POST請求支持提交文件,流,string,表單等等 。這裏拿POST表單請求作爲請求示例:

        OkHttpClient okHttpClient = new OkHttpClient();
        RequestBody requestBody = new FormBody.Builder()
                .add("username", "qinzishuai")
                .add("password", "111111")
                .build();
        Request request = new Request.Builder()
                .url("https://www.wanandroid.com/user/login")
                .post(requestBody)
                .build();   

        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("okhttp", "onFailure: " + e.getMessage());
            }

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

                Log.d("okhttp", "onResponse: " + response.body().string());
            }
        });

大家可以關注我的微信公衆號:「秦子帥」一個有質量、有態度的公衆號!

公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章