關(guān)于volley網(wǎng)絡(luò)框架的使用方法這里就不作詳細(xì)介紹了纪他,這里附上一個(gè)比較詳細(xì)的介紹用法和原理的文章:volley介紹
volley的二次封裝
雖然我沒用實(shí)操過okhttp,但是okhttp框架的確方便很多,比如支持request.before()等方法框仔,用戶可以在發(fā)起請求之前實(shí)現(xiàn)自己的請求動畫等等材义,其實(shí)volley也可以自己動手實(shí)現(xiàn)這些方法炕矮,這里直接附上簡書上一位作者的文章:
我直接采用了這篇文章中的方法昵慌,對加載框進(jìn)行了封裝
token的處理
在開發(fā)移動APP過程中,需要向服務(wù)端傳遞token值袭蝗,看了網(wǎng)上很多人的帖子唤殴,有些項(xiàng)目token認(rèn)證失敗還分了好幾種情況
比如 token過期般婆、token無效、token丟失等朵逝,我們這邊后臺統(tǒng)一成了一個(gè)狀態(tài)碼返回蔚袍,也就是只分有效和無效(具體怎么樣分還看后臺怎么處理)
安卓端的處理總的來說只有兩個(gè)操作?
1封裝token參數(shù)到請求中
post方式:
if(!url.equals(RequestUrl.URL_LOGIN)){
? ? ? params.put("token",getToken(mContext))
}其中 params是post方式存放參數(shù)的HashMap
get方式:
可以跟post方式一樣,在api中添加一個(gè)Map<String,String> params的參數(shù)配名,然后解析map,將token和其他參數(shù)一起拼裝成get請求路徑
2 對后臺返回結(jié)果進(jìn)行封裝啤咽,攔截token信息,如果狀態(tài)碼標(biāo)識需要登錄渠脉,直接跳轉(zhuǎn)到登錄頁
public BaseInterface(Context mContext,boolean isDispatchLNotLogin) {
? ? this.mContext = mContext;
? ? ?this.isDispatchLNotLogin = isDispatchLNotLogin;
}
將返回結(jié)果封裝在BaseInterface里面宇整,并在構(gòu)造設(shè)置一個(gè)是否攔截的參數(shù)
public void onResponse(String s){
? ? JSONObject jsonObject = JSON.parseObject(s);
? ? if(jsonObject.containsKey("status")){
? ? ? ? ?if(isDispatchLNotLogin){
? ? ? ? ?dispatch(jsonObject.getInteger("status"));
? ? ?}else{
? ? ? ? ?onStatusCode(jsonObject.getInteger("status"));
? ? ?}
? ?
? ? if(jsonObject.containsKey("data")){
? ? ? ? ?onMyData(jsonObject.getString("data"));
}
拿到返回結(jié)果先解析status,并交給攔截方法處理攔截邏輯:
/**
* 攔截處理session超時(shí)返回碼
* @param code
*/
private void dispatch(int code){
switch (code){
case StatusCode.NOT_LOGIN:
try{
((BaseActivity) mContext).TriggerRelogin();
}catch (Exception e){
throw new RuntimeException("All activities must extends BaseActivity!");
}