国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Volley 快捷使用

2019-11-09 18:16:10
字體:
來源:轉載
供稿:網友

很多人使用volley進行http請求,這里我介紹一下一種相對快捷的使用方式。 先來看一下最終效果:

PRivate void httpRequest() { MyHttpRequest.getInstance().loginRequest(this, "phone", "code", new ZYHttpHandler<User>(this) { @Override public void onGetDataSuccess(User data) { //todo 這里進行數據處理 } }); }

只需傳入相應的參數,指定返回結果的類型,就能得到相應的bean。 下面詳細看看里面的內容,先來看MyHttpRequest:

/** * 登錄接口 */public void loginRequest(Context context, String phone, String verifyCode, ZYHttpHandler<User> handler) { LinkedHashMap<String, String> params = new LinkedHashMap<>(); params.put("phoneNum", phone); params.put("verifyCode", verifyCode); MyClient.getInstance() .post(context, "login_url", params, handler); }

里面很簡單,只進行參數的處理和引用接口,個人覺得寫在一起還是很方便的。 接下來看MyClient,這個里面就是使用volley的基本寫法,首先看post請求:

/** * post請求 * * @param url 請求地址 * @param params 請求參數 * @param handler 響應handler */ public void post(Context context, String url, HashMap<String, String> params, ZYHttpHandler<?> handler) { String URL = getUrlWithQueryString(true, url, params); LogUtils.e(URL); if (!NetworkUtils.hasNetWork(context)) { handler.onFinish(); handler.onFailure(-1, "", "請檢查網絡", null); } else { if (params == null) { params = new LinkedHashMap<>(); } JSONObject jsonObject = new JSONObject(params); JsonRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonObject, handler, handler) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<>(); headers.put("Accept", "application/json"); headers.put("Content-Type", "application/json; charset=UTF-8"); return headers; } }; mRequestQueue.add(jsonRequest); } }

沒有什么特別的,就是對volley的簡單使用: get請求:

/** * get請求 */ public void get(Context context, String url, HashMap<String, String> params, ZYHttpHandler<?> handler) { String URL = getUrlWithQueryString(true, url, params); LogUtils.e(URL); if (!NetworkUtils.hasNetWork(context)) { handler.onFinish(); handler.onFailure(-1, "", "請檢查網絡", null); return; } JsonRequest jsonRequest = new JsonObjectRequest(url, handler, handler) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<>(); headers.put("Accept", "application/json"); headers.put("Content-Type", "application/json; charset=UTF-8"); return headers; } }; mRequestQueue.add(jsonRequest); }

終于到了最后的核心—ZYHttpHandler:

public abstract class ZYHttpHandler<T> implements Response.Listener<JSONObject>, Response.ErrorListener

T指定范性,使用時傳入相應的bean,獲取json數據成功后解析時用; implements Response.Listener、Response.ErrorListener是volley所用的參數,各自有對應的成功(onResponse)、失敗方法(onErrorResponse)。 json數據請求成功會調用onResponse方法,這里能得到數據就證明volley使用是正確的,至于是不是你想要的格式,還要看看你的參數對不對。

@Override public void onResponse(JSONObject jsonObject) { try { LogUtils.e(jsonObject.toString()); Type type = getType(); if (jsonObject.has("code") && jsonObject.getString("code").equals("0")) { Gson gson = new Gson(); if (!jsonObject.has("content")) { onGetDataSuccess(null); onFinish(); return; } T t; String data = jsonObject.getString("content"); if (data.equals("")) { t = null; } else { t = gson.fromJson(data, type); } onGetDataSuccess(t); } else { if (jsonObject.has("code") && jsonObject.has("content")) { onFailure(0, null, jsonObject.getString("content"), null); } else if (jsonObject.has("content")) { onFailure(0, null, jsonObject.getString("content"), null); } else if (jsonObject.has("code")) { //沒有錯誤信息則不彈出提示 //onFailure(jsonObject.getInt("code"), null, null, null); } } } catch (Exception e) { e.printStackTrace(); onFailure(0, null, "", e); } onFinish(); }

拿到json數據后,首先進行簡單的解析,然后用gson對content里面的數據進行解析,將得到的bean傳入onGetDataSuccess方法。這樣寫的話,對所有數據都進行了統一的解析處理,gson調用一次夠了,所有的錯誤情況進行統一處理。 ps:代碼里面的json數據是我隨意創造的,具體情況具體對待,有的json數據content里面一會是jsonObject,一會是jsonArray,這種情況你需要和你們后臺談談了,或者加一個判斷。 失敗方法onErrorResponse:

@Override public void onErrorResponse(VolleyError error) { try { if (error.toString().equals("com.android.volley.TimeoutError")) { onFailure(-1, null, "請求超時", null); } else { onFailure(-1, null, error.getMessage(), null); } } catch (Exception e) { e.printStackTrace(); onFailure(-1, null, e.getMessage(), e); } }

至此,volley快捷使用介紹完畢,使用起來順手多了。 下面附上源碼及volley架包:鏈接


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临沂市| 磴口县| 新乡市| 武川县| 英德市| 喀喇沁旗| 巴里| 德令哈市| 苗栗县| 塔河县| 丹巴县| 商河县| 砚山县| 甘肃省| 汉源县| 彝良县| 井冈山市| 右玉县| 尚义县| 贵港市| 鄂伦春自治旗| 新泰市| 馆陶县| 南宁市| 杨浦区| 景德镇市| 中山市| 龙门县| 介休市| 太保市| 岚皋县| 阜康市| 五峰| 普定县| 东方市| 曲水县| 兴业县| 万州区| 玉龙| 于田县| 湛江市|