本節前言
前面講述了運行更快、節省流量等多個優勢OkHttp,雖然他的優勢特別多,但是使用起來也是比較麻煩的,就比如獲取個圖片都要寫很長一段代碼,所以今天我們就來講一下OkGo,基于okhhttp的封裝類,你會發現他真的比okhttp簡單的多
關于使用
其實github庫有詳細的介紹,這里就講解一下他的基本使用,介紹上一篇okhttp的功能講解
- 一般的get請求
- 一般的post請求
- 基于Http的文件上傳
- 文件下載
- 加載圖片
- 支持請求回調,直接返回對象、對象集合
- 支持session的保持
第一步添加依賴
//必須使用
compile 'com.lzy.net:okgo:3.0.4'
//以下三個選擇添加,okrx和okrx2不能同時使用
compile 'com.lzy.net:okrx:1.0.2' //Rxjava
compile 'com.lzy.net:okrx2:2.0.2' //Rxjava2
compile 'com.lzy.net:okserver:2.0.5'//下載管理和上傳管理
這里只講解okgo的用法,其他可以看官網的詳細介紹
第二步初始化
最簡配置
OkGo.getInstance().init(this);
這樣寫是使用OkGO內部默認初始化的OkHttpClient來進行網絡請求,包含了基本的log打印,超時時間和https相關的配置,但是建議還是自己配置好OkHttpClient傳給OkGo比較好,詳細自定義OkHttpClient的方法就是配置原生的okhttp的方法,建議的一些配置如下,都是可選的,如果需要你就加,不需要就別加了。
就需要兩部,關于其他配置詳細看官網介紹
okgo的基本使用
無論做什么請求,第一行的泛型一定要加!!!,ServerModel的泛型,就是上圖的請求一大堆
基本請求請往下看
一、一般的get請求
OkGo.<String>get("http://www.baidu.com")
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
String body = response.body();
System.out.println(body);
}
});
運行結果
Response對象介紹
先看Response對象內部的字段:
該對象一共有5個字段,分別表示以下意思:
body:當前返回的數據,T即為數據的泛型。使用方法body()獲取該值。如果請求成功,回onSuccess(),該字段為convertResponse()解析數據后返回的數據。如果發生異常,回調onError(),該字段值為null。
throwable:如果發生異常,回調onError(),該字段保存了當前的異常信息。如果請求成功,回調onSuccess(),該字段為null。使用方法getException()獲取該值。
isFromCache:表示當前的數據是來自哪里,true:來自緩存,false:來自網絡。使用方法isFromCache()獲取該值。
rawCall:表示當前請求的真正okhttp3.Call對象。使用方法getRawCall()獲取該值。
rawResponse:表示當前請求服務端真正返回的okhttp3.Response對象,注意:如果數據來自緩存,該對象為null,如果來自網絡,該對象才有值。使用方法getRawResponse()獲取該值。
另外,該對象還有以下幾個方法:
code():http協議的響應狀態碼,如果數據來自網絡,無論成功失敗,該值都為真實的響應碼,如果數據來自緩存,該值一直為-1。
message():http協議對響應狀態碼的描述信息,如果數據來自網絡,無論成功失敗,該值都為真實的描述信息,如果數據來自緩存,該值一直為null。
headers():服務端返回的響應頭信息,如果數據來自網絡,無論成功失敗,該值都為真實的頭信息,如果數據來自緩存,該值一直為null。
isSuccessful():本次請求是否成功,判斷依據是是否發生了異常。
二、一般的post請求
post和get請求是一樣的,只不過上面的get換成了post,這里我們就講解一下用戶的登錄
get請求連接如下
http://192.168.56.1:8080/LoginServlet?username=abc&password=123
post請求連接如下
OkGo.<String>post("http://192.168.56.1:8080/LoginServle")
.params("username","abc")
.params("password","123")
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
String body = response.body();
System.out.println(body);
}
});
三、文件上傳
string文本
JSON文本
文件上傳
四、文件下載
五、加載圖片
OkGo.getInstance().init(getApplication());
OkGo.<Bitmap>post("http://image.uczzd.cn/7402592950813081745.jpg?id=0&from=export")
.tag(this)
.execute(new BitmapCallback() {
@Override
public void onSuccess(Response<Bitmap> response) {
Bitmap body = response.body();
iv.setImageBitmap(body);
}
});
運行結果