Volley简介(三)
来源:互联网 发布:巢湖学院网络教学平台 编辑:程序博客网 时间:2024/05/22 00:30
自定义Request:
我们先看下Request,是所有网络请求的基类。
支持的请求方式,包含post,get等请求方式,在定义请求方式中可以自己设定。
/** * Supported request methods. */ public interface Method { int DEPRECATED_GET_OR_POST = -1; int GET = 0; int POST = 1; int PUT = 2; int DELETE = 3; int HEAD = 4; int OPTIONS = 5; int TRACE = 6; int PATCH = 7; }构造方法,如果想修改请求方法就在这里设定:
/** * Creates a new request with the given URL and error listener. Note that * the normal response listener is not provided here as delivery of responses * is provided by subclasses, who have a better idea of how to deliver an * already-parsed response. * * @deprecated Use {@link #Request(int, String, com.android.volley.Response.ErrorListener)}. */ @Deprecated public Request(String url, Response.ErrorListener listener) { this(Method.DEPRECATED_GET_OR_POST, url, listener); } /** * Creates a new request with the given method (one of the values from {@link Method}), * URL, and error listener. Note that the normal response listener is not provided here as * delivery of responses is provided by subclasses, who have a better idea of how to deliver * an already-parsed response. */ public Request(int method, String url, Response.ErrorListener listener) { mMethod = method; mUrl = url; mErrorListener = listener; setRetryPolicy(new DefaultRetryPolicy()); mDefaultTrafficStatsTag = TextUtils.isEmpty(url) ? 0: Uri.parse(url).getHost().hashCode(); }监听处理,将网络请求交给你的监听处理。
/** * Subclasses must implement this to perform delivery of the parsed * response to their listeners. The given response is guaranteed to * be non-null; responses that fail to parse are not delivered. * @param response The parsed response returned by * {@link #parseNetworkResponse(NetworkResponse)} */ abstract protected void deliverResponse(T response);处理请求的数据,返回的是数据是字节数组,然后根据你的需要处理数组:
/** * Subclasses must implement this to perform delivery of the parsed * response to their listeners. The given response is guaranteed to * be non-null; responses that fail to parse are not delivered. * @param response The parsed response returned by * {@link #parseNetworkResponse(NetworkResponse)} */ abstract protected void deliverResponse(T response);以上的方法是重写中,必要涉及到的,下面我们来看下StringRequest的代码:
public class StringRequest extends Request<String> { private final Listener<String> mListener; public StringRequest(int method, String url, Listener<String> listener, ErrorListener errorListener) { super(method, url, errorListener); mListener = listener; } public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) { this(Method.GET, url, listener, errorListener); } @Override protected void deliverResponse(String response) { mListener.onResponse(response); } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { String parsed; try { parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); } catch (UnsupportedEncodingException e) { parsed = new String(response.data); } return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); }}
ImageRequest ,JsonArrayRequest等,形式相同,所以我们自定义的请求也可以“借鉴”下这种写法。
public class DownLoadRequest extends Request {private Listener listener;/** 自定义的类 */private SimpleKeyBean simBean;/** * 构造:自定义请求参数 * * @param url * @param sim * @param listener * @param errorlistener */public DownLoadRequest(String url, SimpleKeyBean sim, Listener listener,ErrorListener errorlistener) {super(Method.GET, url, errorlistener);// TODO Auto-generated constructor stubthis.listener = listener;this.simBean = sim;}@Overrideprotected void deliverResponse(Object res) {// TODO Auto-generated method stublistener.onResponse(res);}@Overrideprotected Response parseNetworkResponse(NetworkResponse response) {// TODO Auto-generated method stubDownBMBean bean;try {// 文件路径String path = DataProcess.dirPackage() + "/" + simBean.getSinger()+ "-" + simBean.getSong() + ".mp3";// 将字节数组保存为文件DataProcess.saveByteFile(response.data, path);// 创建返回的对象bean = new DownBMBean("suc", path);// 返回数据return Response.success(bean,HttpHeaderParser.parseCacheHeaders(response));} catch (Exception e) {// TODO: handle exceptionreturn Response.error(new ParseError(e));}}}
使用:
RequestQueue reQueue = Volley.newRequestQueue(this);//传递请求的参数DownLoadRequest request = new DownLoadRequest(path, simBean,new Response.Listener() {public void onResponse(Object bean) {// TODO Auto-generated method stub//获取返回的对象dwBean = (DownBMBean) bean;insHandler.sendEmptyMessage(1);}}, new Response.ErrorListener() {public void onErrorResponse(VolleyError arg0) {// TODO Auto-generated method stubinsHandler.sendEmptyMessage(2);}});reQueue.add(request);
1 0
- Volley简介(三)
- Volley 简介
- Volley 简介
- Volley简介
- Volley 简介
- Volley简介
- Volley简介
- Volley简介
- volley简介
- Volley简介
- Volley简介
- Volley简介
- android-Volley框架简介
- Volley框架简介
- Volley简介(一)
- Volley简介(二)
- Volley简介(四)
- volley使用简介
- mysql source code install method
- NGUI 鼠标事件点击时屏蔽其它鼠标事件
- RGB INT
- JAVA: List用法
- 网络请求部分-------HttpClient和HttpURLConnection
- Volley简介(三)
- android 中UID与PID的作用与区别
- IOS自定义状态栏
- 阿里云ubuntu 创建svn服务器及SVN服务器的command
- 经验总结35--IP地址区域匹配
- Azure网站上的PHP — 配置自定义版本PHP
- TMS320F28335项目开发记录10_28335之SCI模块
- java开发中23种设计模式的总结
- 关于tableview 加载数据,性能优化