参考:
http://www.tuicool.com/articles/eeyQ3eE
http://blog.youkuaiyun.com/xyz_lmn/article/details/12165391
一:Volley框架的特点
1:版本API2.3以下使用HttpClient,API大于等于2.3使用HttpURLConnection
2 : 提供默认的内存缓存和磁盘缓存
3:请求队列的优先级排列
4:提供多样的取消机制
5:提供便捷的图片加载工具
6:NetWorkImageView默认解决了图片乱序问题(机制:NetworkImageView中都会对应一ImageContainer,存储图片的请求地址,当NetworkImageView重用的时候回合新传进来的url进行对比,如果相同的话说明这是一条重复的请求,就直接return掉,如果不同的话就调用cancelRequest()方法将请求取消掉,然后将图片设置为默认图片并重新发起请求。)
二:vollery请求的方式
StringRequest
JsonArrayRequest
JsonObjectRequest
ImageRequest
三:每一种方式的使用
1:StringRequest网络请求返回字符串
两个构造函数:
StringRequest(int method, String url, Listener<String> listener, ErrorListener errorListener)
StringRequest(String url, Listener<String> listener, ErrorListener errorListener)
参数 method: 请求方式
参数 url : 请求的路径
参数 listener: 请求的返回回调
参数 errorListener 请求出错时回调
构造函数2调用构造函数1,默认使用Get请求方式。
Get使用方式比较简单,直接调用构造方法就可以使用。
Post使用方式:
在StringRequest的类中,重写方法getHeaders,和getParams方法,分别用来设置头信息和设置参数。------通信开始时调用
如果想对返回的信息进行进一步处理可以重写parseNetworkResponse方法。-------通信结束调用
最后调用requestQueue.add(request),将请求加入到请求队列中
2:JsonObjectRequest
两个构造函数
JsonObjectRequest(int method, String url, JSONObject jsonRequest, Listener<JSONObject> listener, ErrorListener errorListener)
JsonObjectRequest(String url, JSONObject jsonRequest, Listener<JSONObject> listener, ErrorListener errorListener)
使用方法类似StringRequest
最后调用requestQueue.add(request),将请求加入到请求队列中
3:JsonArrayRequest
4:ImageRequest 构造函数 ImageRequest(url, listener, maxWidth, maxHeight, scaleType, decodeConfig, errorListener) 参数1:图片路径 参数2:成功加载图片回调。回调得到bitmap 参数3:最大宽度。设置为0则不进行压缩 参数4:最大高度。设置为0则不进行压缩 参数5:图片scale类型 参数6:图片的颜色属性 ARGB_8888、ALPHA_8、ARGB_4444、RGB_565 参数7:错误回调 注意:maxWidth, maxHeight都设置为0,则表示不惊醒压缩。若一个设置为0另一个不为0,则按照不为零的值进行 压缩,0值进行等比例压缩。 最后记得requestQueue.add(request) 四:ImageLoader 更加强大的网络图片请求 简介:ImageLoader也可以用来进行图片的加载,切InageLoader内部也使用的是ImageRequest来实现的。并且更加 高效,因为ImageLoader内部不仅进行图片的缓存,而且还可以去掉重复的链接,避免重复发送请求。//新建一个ImageLoader,传入requestQueue和图片缓存类ImageLoader imageLoader = new ImageLoader(requestQueue,new BitmapCache()); 参数1:请求队列 参数2:缓存(自己创建,实现ImageCache接口)ImageListener listener = ImageLoader.getImageListener(imageView,default_image, failed_image);//参数分别为要显示的图片控件,默认显示的图片(用于图片未下载完时显示),下载图片失败时显示的图片
参数1:要进行展示图片的imageView
参数2:图片未加载出来的时候展示的图片
参数3:图片加载失败时展示的图片
imageLoader.get(url, listener, maxWidth, maxHeight);//开始请求网络图片BitmapCache类的创建:public class BitmapCache implements ImageCache { private LruCache<String, Bitmap> mCache; public BitmapCache() { int maxMemory = (int) Runtime.getRuntime().maxMemory(); int maxSize = maxMemory/8; mCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } }
五:NetworkImageView(一种介绍了一些)
可以像普通自定义控件一样进行使用。
一些设置://默认图片 networkImageView.setDefaultImageResId(R.drawable.default_image); //加载失败显示的图片 networkImageView.setErrorImageResId(R.drawable.failed_image); //加载图片 networkImageView.setImageUrl(url,imageLoader);
六:Volley的坑
七:volley的拓展(待续) 自己当前还没有用过,但是volley的拓展性比较好,可以进行xml的请求,同时可以对volley进行封装,加入fastjson或者GJson配合回调。 volley中使用GZip压缩public class GZipRequest extends StringRequest{ public GZipRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) { super(method, url, listener, errorListener); } public GZipRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) { super(url, listener, errorListener); } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { if(null == response.data){ return Response.success("", HttpHeaderParser.parseCacheHeaders(response)); }else { StringBuilder output = new StringBuilder(); BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new GZIPInputStream(new ByteArrayInputStream(response.data)))); String read; while ((read = in.readLine()) != null) { output.append(read).append("\n"); } } catch (IOException e) { return Response.error(new ParseError()); }finally { if (null != in) { try { in.close(); } catch (IOException e) { return Response.error(new ParseError()); } } } return Response.success(output.toString(), HttpHeaderParser.parseCacheHeaders(response)); } } }