国产探花免费观看_亚洲丰满少妇自慰呻吟_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架包:鏈接


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浪卡子县| 北辰区| 德庆县| 怀远县| 肥西县| 重庆市| 五河县| 沂水县| 岫岩| 北票市| 福清市| 汶上县| 博兴县| 车险| 乌兰县| 青神县| 柳江县| 张北县| 靖江市| 香河县| 云南省| 临沂市| 雷波县| 北碚区| 垣曲县| 德安县| 奉化市| 吴川市| 南岸区| 博爱县| 炎陵县| 东兴市| 芦溪县| 阿鲁科尔沁旗| 固安县| 丰城市| 嘉义市| 乌拉特后旗| 阜阳市| 永兴县| 孝感市|