Okhttp使用簡明教程

需求

更高級的HttpUrlConnection/HttpClient

引入:

maven

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.14.2</version>
</dependency>

gradle

compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.14.2'

API原理:

  1. OkHttpClient負責發送Request,并返回Response:
OkHttpClient client=new OkHttpClient();
Request request=null; //建造者模式建造Request對象
Response response=client.newCall(request).execute();
  1. Request對象由建造者模式設置一系列細節:
Request request=new Request.Builder()
                .url("https://www.baidu.com")
                .header("Content-Type","application/json")
                .addHeader("role","admin")
                .addHeader("role","manager")
                .get() //這是默認項
                .build();
  1. Response的解析技術綜合:
        Response response=client.newCall(request).execute();
        response.code();//狀態碼
        response.header("Cookie");//響應頭
        response.body().bytes();//原生字節組
        response.body().byteStream();//流方式
        response.body().string();//字符串形式(原始編碼)

異步

//異步調用,開子線程守護網絡響應,且響應結束線程存活
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("失敗.....");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                System.out.println(response.body().string());
                System.exit(0);
            }
        });
        System.out.println("結局無需等......");

發送請求體(post,put,patch)

  1. 使用RequestBody對象:
RequestBody requestBody= RequestBody.create(MediaType,[String|ByteString|byte[]|File])
  1. 具體示例(json提交):
MediaType JSON= MediaType.get("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON,"{id:1}");
Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();
  1. 具體示例(普通表單提交):
RequestBody formBody = new FormBody.Builder()
                .add("name", "john")
                .build();
Request request = new Request.Builder()
                .url("https://en.wikipedia.org/w/index.php")
                .post(formBody)
                .build();
  1. 具體示例(文件上傳提交):
    MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
    RequestBody requestBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart("title", "Square Logo")
        .addFormDataPart("image", "logo.png",RequestBody.create(MEDIA_TYPE_PNG,new File("logo.png")))
        .build();

    Request request = new Request.Builder()
        .header("Authorization", "xxxx")
        .url("https://api.imgur.com/3/image")
        .post(requestBody)
        .build();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • OkHttp使用完全教程 標簽 : Http請求, 類庫blog : http://blog.csdn.net/o...
    oncealong閱讀 170,849評論 27 460
  • 這篇文章主要講 Android 網絡請求時所使用到的各個請求庫的關系,以及 OkHttp3 的介紹。(如理解有誤,...
    小莊bb閱讀 1,233評論 0 4
  • 6.1 公鑰密鑰加密原理 6.1.1 基礎知識 密鑰:一般就是一個字符串或數字,在加密或者解密時傳遞給加密/解密算...
    AndroidMaster閱讀 4,037評論 1 8
  • 沒有愛 只不過 是兩個寂寞的人 相互依偎取暖罷了 又何必勉強 更進一步
    不吃糖的加菲貓閱讀 309評論 0 1