okhttp3的使用


okhttp3的使用

 

目錄

1. 簡介
2. 依賴
3. 混淆
4. GET請求
5. POST請求: 提交Form表單
6. POST請求: 提交Json數據

 

簡介

okhttp官網: http://square.github.io/okhttp/
okio官網: https://github.com/square/okio

 

依賴

implementation 'com.squareup.okhttp3:okhttp:3.11.0'

 

混淆

# Okhttp3的混淆配置
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform

 

GET請求

//創建OkHttpClient對象
OkHttpClient okHttpClient  = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10,TimeUnit.SECONDS)
        .readTimeout(20, TimeUnit.SECONDS)
        .build();

//請求的url
String requestUrl = "http://www.geaosu.com/app/user/updatainfo?userName=geaosu";

final Request request = new Request.Builder()
        .url(requestUrl)    //請求地址
        .get()              //設置請求方式: get()方式和post()方式, 默認請求方式為GET
        .build();           //構建一個請求Request對象

//創建Call
Call call = okHttpClient.newCall(request);

//加入隊列 異步操作
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        //請求失敗的監聽: 異步請求(非主線程)
        System.out.println("連接失敗");
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        //請求成功的監聽: 異步請求(非主線程)
        if(response.code()==200) {
            System.out.println(response.body().string());
        }
});

 

POST請求: 提交Form表單

//構造OkHttpClient對象
OkHttpClient okHttpClient  = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10,TimeUnit.SECONDS)
        .readTimeout(20, TimeUnit.SECONDS)
        .build();

//配置POST要提交的數據 --> FormBody
FormBody formBody = new FormBody.Builder()
        .add("userName", "geaosu")
        .add("userMail", "geaosu@163.com")
        .build();

//請求地址
String requestUrl = "http://www.geaosu.com/app/user/updatainfo";

//構造請求
final Request request = new Request.Builder()
        .url()
        .post(formBody)
        .build();

//構造Call
Call call = okHttpClient.newCall(request);

//加入請求隊列
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        //請求失敗監聽: 異步請求(非主線程)
        System.out.println("連接失敗");
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        //請求成功監聽: 異步請求(非主線程)
        if(response.code()==200) {
            System.out.println(response.body().string());
        }
    }
});

 

POST請求: 提交Json數據

//構造okhttp客戶端
OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10, TimeUnit.SECONDS)
        .readTimeout(20, TimeUnit.SECONDS)
        .build();

//配置參數: json數據(key和value)
HashMap<String, String> map = new HashMap<>();
map.put("userQQ", "819813992");
map.put("userName", "geaosu");
map.put("userMail", "geaosu@163.com");
map.put("userWeChat", "geaosu");

//將map轉成json字符串
Gson gson = new Gson();
String json = gson.toJson(map);
//轉換結果: "{"userWeChat":"geaosu","userQQ":"819813992","userName":"geaosu","userMail":"geaosu@163.com"}"

//MediaType  設置Content-Type 標頭中包含的媒體類型值
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);

//請求地址
String url = "http://www.geaosu.com/app/user/updatainfo";

//構造請求
Request request = new Request.Builder()
        .url(url)               //請求地址
        .post(requestBody)      //請求方式: POST
        .build();

//創建Call
Call call = okHttpClient.newCall(request);

//加入請求隊列
call.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());
    }
});

 

華麗的分割線 --------------------------------------------------------------------------------->> 完


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM