使用volley遇到的問題以及解決方法

關(guān)于volley網(wǎng)絡(luò)框架的使用方法這里就不作詳細(xì)介紹了,這里附上一個比較詳細(xì)的介紹用法和原理的文章:volley介紹

volley的二次封裝

雖然我沒用實(shí)操過okhttp,但是okhttp框架的確方便很多,比如支持request.before()等方法,用戶可以在發(fā)起請求之前實(shí)現(xiàn)自己的請求動畫等等,其實(shí)volley也可以自己動手實(shí)現(xiàn)這些方法,這里直接附上簡書上一位作者的文章:

volley封裝的一個不錯的思路

我直接采用了這篇文章中的方法,對加載框進(jìn)行了封裝

token的處理

在開發(fā)移動APP過程中,需要向服務(wù)端傳遞token值,看了網(wǎng)上很多人的帖子,有些項(xiàng)目token認(rèn)證失敗還分了好幾種情況

比如 token過期、token無效、token丟失等,我們這邊后臺統(tǒng)一成了一個狀態(tài)碼返回,也就是只分有效和無效(具體怎么樣分還看后臺怎么處理)

安卓端的處理總的來說只有兩個操作?

1封裝token參數(shù)到請求中

post方式:

if(!url.equals(RequestUrl.URL_LOGIN)){
? ? ? params.put("token",getToken(mContext))
}

其中 params是post方式存放參數(shù)的HashMap

get方式:

可以跟post方式一樣,在api中添加一個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è)置一個是否攔截的參數(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超時返回碼

* @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!");

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容