Volley之简单封装(1)
来源:互联网 发布:学生请假软件 编辑:程序博客网 时间:2024/04/30 08:56
本文对Volley简单封装,本文只是记录volley的使用
主要实现加载视图与请求分开:
数据回调的class
public abstract class CallBack { protected void onFail(int errCode,String errMsg) { //TODO 请求失败处理 finish(); } public abstract void onSuccess(JSONObject json) throws JSONException; public void start(){ //开始请求,出现加载进度条 } public void finish(){ //请求结束,隐藏进度条 }}
单例请求class:
public class HttpUtils { private static HttpUtils ourInstance = new HttpUtils(); private RequestQueue requestQueue = Volley.newRequestQueue(App.app); public static HttpUtils getInstance() { return ourInstance; } private HttpUtils() { } //根据需求添加重载方法 public void Post( String url, final Map<String,String> map, final CallBack callBack) { makeRequest(Request.Method.POST,url,map,callBack,null); } private void makeRequest(int method, String url, final Map<String,String> map, final CallBack callBack, Object tag){ if (callBack != null) { callBack.start(); } final StringRequest request = new StringRequest(method, url, new Response.Listener<String>() { @Override public void onResponse(String response) { try { JSONObject object = new JSONObject(response); if (callBack != null) { int code = object.getInt("code"); if (code == 0) { callBack.onSuccess(object); callBack.finish(); }else callBack.onFail(null,code,object.getString("errMsg")); } } catch (JSONException e) { callBack.onFail(null,-1,"读取服务器数据失败"); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (callBack!=null) callBack.onFail(null,-2,"请求服务器失败"); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { if (map != null) return map; return super.getParams(); } }; request.setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); if (tag!=null) { request.setTag(tag); } requestQueue.add(request); } public void cancelRequest(@NotNull Object tag){ requestQueue.cancelAll(tag); } public static final class RequestBuilder{ private int method = Request.Method.POST; private String url; private Map<String,String> map; private CallBack callBack; private Object tag; public void build(){ if (method == Request.Method.GET && map!=null){ url=url+"?"; for (String key:map.keySet()) { try { url=url+key+"="+ URLEncoder.encode(map.get(key),"UTF-8")+"&"; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } url = url.substring(0, url.length()-1); } HttpUtils.getInstance().makeRequest(method,url,map,callBack,tag); } public RequestBuilder bindMethod(int method){ this.method = method; return this; } public RequestBuilder bindMap(Map<String,String> map){ this.map = map; return this; } public RequestBuilder bindCallBack( CallBack callBack){ this.callBack = callBack; return this; } public RequestBuilder bindTag( Object tag){ this.tag = tag; return this; } }}
使用方式:
new HttpUtils.RequestBuilder().bindMap(new HashMap<String, String>()) .bindTag("") .bindCallBack(new CallBack() { @Override public void onSuccess(JSONObject json) throws JSONException { } }).build(); //---------------或者下面这个方式------------- HttpUtils.getInstance().Post("url", new HashMap<String, String>(), new CallBack() { @Override public void onSuccess(JSONObject json) throws JSONException { } });
0 0
- Volley之简单封装(1)
- Volley之简单封装(2)
- Volley简单封装之Gson解析
- Volley简单封装--笔记
- Android:简单封装Volley StringRequest
- Volley简单二次封装代码
- Volley之返回数据封装
- Volley 简单封装调用超简单
- Volley网络请求的简单封装使用
- Volley的使用(三) 简单封装
- 拒绝繁琐,Volley框架的简单封装
- Android 自己简单封装的Volley
- Android HTTPS认证之Volley封装
- Android HTTPS认证之Volley封装
- Volley封装
- volley源码的简单分析(1)
- Volley的简单使用,和简单二次封装
- 对Volley简单的封装,让网络请求更简单
- linux各种系统文件详解(sysctl.conf)
- json深复制与浅复制
- use tools:overrideLibrary="xxx.xxx.xxxr" to force usage 问题分析。
- 洛谷 P1345 [USACO5.4]奶牛的电信Telecowmunication
- 一次血的教训,阿里云rds mysql 数据库,本地化并日志恢复已删除的两天数据
- Volley之简单封装(1)
- LightOJ-1364 Expected Cards(期望dp)
- 使用OD从零开始Cracking
- Codeforces Round #393 Pavel and barbecue
- Mac使用Cocos2.2.6的最低配置
- 使用BOOL变量犯过的错误
- 【t084】数列
- 算法之路二:刘汝佳算法竞赛入门经典:c++结构体
- 克鲁斯卡尔算法:蓝桥杯 算法训练 安慰奶牛 (最小生成树)