Volley(一)
来源:互联网 发布:linux 安装ttf 编辑:程序博客网 时间:2024/06/05 16:55
首先,我使用的是AndroidStudio,用的依赖是:compile 'com.android.volley:volley:1.0.0'
Eclipse开发可以到GitHub上下载,然后导入。https://github.com/google/volley
Volley是集请求,图片,文件下载于一身的框架,在面对数据量小,请求次数多时发挥功能强大,而面对大文件下载等大数据传输时则力不从心。
Volley请求网络都是基于请求队列的,我们只需要将请求放在队列中,则会在队列以此处理,因此在大量网络请求,队列发挥着重要作用。
Volley:
RequestQueue 用来执行请求的请求队列
Request 用来构造请求对象
Request:
StringRequest 响应的主体为字符串
JsonArrayRequest 发送和请求Json数组
JsonObjectRequest 发送和接收Json对象
ImageRequest 发送和接收Image图片
使用:
首先我们需要创建一个ResuestQueue,然后再创建自己需要的请求并通过 add 来将其添加进请求队列中。requestQueue = Volley.newRequestQueue(context);
StringRequest s = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { return super.getParams(); } };
这里我们使用Post请求方式来进行访问url,之后再StringRequest类中又重写了getParams方法是为了添加请求参数。
还有现在最常用的JSON格式:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(jsonObjectRequest);
在此,我们是访问网络数据。
在Volley中还嵌入ImageLoader框架,用于网络图片处理,方法和上面很像,也是在列队中添加一个Request请求对象,之后列队会为我们处理该请求。
使用ImageRequest来完成这一请求编码
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { } }, 100, 100, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(imageRequest);
使用ImageLoader:
在Volley中的ImageLoader内部也是使用ImageRequest来实现的,但是ImageLoader比其更加高效,因为他不仅可以帮我们队图片进行缓存,还可以过滤重复的链接,避免出现重复请求。该现象在ListView、GridView上更加明显。
方法和之前有所不同,首先需要创建Queue队列(第一步一样)。
第二,创建ImageLoader对象,其中就需要将队列对象传进去:
ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) { return null; } @Override public void putBitmap(String url, Bitmap bitmap) { } });
第三步,就是调用 ImageLoader的getImageListener 方法,第一个参数是放置的控件,第二个是加载时的图片,第三个图片是加载失败时显示的图片。
ImageLoader.ImageListener imageListener = imageLoader.getImageListener(imageView, R.drawable.ic_launcher, R.drawable.ic_launcher);
在最后,调用ImageLoad的 get 方法放置我们的url和配置好的imageListener。当然他也有设置图片大小的重载方法。
imageLoader.get(url, imageListener);以上是对ImageLoader的基本用法,而高级用法都在 cache 中。在此推荐使用LruCache功能进行缓存。
class BitmapCache implements ImageLoader.ImageCache { public LruCache<String, Bitmap> lruCache; public BitmapCache() { lruCache = new LruCache<String, Bitmap>(8 * 1024 * 1024) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return lruCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { lruCache.put(url, bitmap); } }这里实现了ImageCache接口,并在其中使用LruCahce集合来做缓存。
NetworkImageView
在最后,Volley还提供了第三种方式加载网络图片。NetworkImageView控件。
1.创建RequestQueue列队
2.创建ImageLoader对象
3.在布局中添加该控件
4.在代码中找到该控件并设置要加载的图片地址
networkImageView.setDefaultImageResId(R.drawable.default_image); networkImageView.setErrorImageResId(R.drawable.failed_image); networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", imageLoader);
当然,我们可以继承Request类来自己定义自己的请求方式,确认得到制定的返回格式。
- 初试Volley(一)
- 初试Volley(一)
- Volley(一)
- Volley(一)
- Volley(一)
- Volley的使用(一)
- Volley框架阅读(一)
- Volley(一), 基本用法
- android volley 总结(一)
- Volley学习记录(一)
- Volley使用笔记(一)
- Volley 源码解析(一)
- Volley源码解析(一)
- volley的使用(一)
- Volley 源码分析(一)
- Volley源码分析(一)
- Android Volley完全解析(一),Volley的基本用法
- android volley(一)初识Volley的基本用法
- CentOS多网卡下 应用层无法收到组播的问题解决
- golang 如何重写http 请求处理
- Spring Data JPA Repository
- C++中两种include的用法区别
- 编程求解矩阵的行列式
- Volley(一)
- 测试用例
- Spring使用Cache(转载地址:http://elim.iteye.com/blog/2123030)
- NC portal给参照设置条件(添加过滤条件)
- glibc函数exit源码分析
- Unity。。。刚体在c#脚本里调用rigidbody.freezePosition或者冻结任意一个轴或组合冻结
- 【Java集合的详细研究3】Arrays类常用方法
- 我对OpenFlow的理解
- sql server 脚本创建备份数据库的存储过程及利用前述存储过程自动备份数据库的作业