eoe 移动开发者论坛

 找回密码
 加入eoe

QQ登录

只需一步,快速开始

查看: 2408|回复: 14
收起左侧

Volley基本使用介绍

[复制链接]

签到天数: 132 天

连续签到: 1 天

[LV.7]常住居民III

4

主题

208

帖子

9233

e币
发表于 2015-1-27 17:23:34 | 显示全部楼层 |阅读模式

没有eoe的账号,级别还太低,出门如何吹牛逼?

您需要 登录 才可以下载或查看,没有帐号?加入eoe

x
本帖最后由 大姑爷 于 2015-1-27 17:32 编辑

Volley是什么?
Volley是Google在2013 Google I/O 大会发布的Android平台网络通讯库,旨在帮助开发者实现更快速,简单,健壮的网络通讯。同时Volley也支持网络图片的缓存加载功能。
在发布时所配的是这样一张图片,我们可以看到多人发射弓箭的场景。

谷歌在告诉我们,volley适用于数据量不大,但是通讯频率较高的场景。
Volley基本使用下载Volley源码
我们有几种方式来下载Volley源码:
实现一个基本HTTP请求-StringRequest
接下来,我们来使用volley实现一个最简单的http请求。
所需权限:
    <uses-permission  android:name="android.permission.INTERNET"/>
我们只需要三部曲就可以实现:
  • 1.创建RequestQueue--请求队列
  • 2.创建Request--请求(可从多种继承子类中选择适用,返回不同数据类型)
  • 3.将Request添加到RequestQueue中
基本代码实现:
RequestQueue mQueue=Volley.newRequestQueue(this);StringRequest mRequest=new StringRequest( "http://www.jikexueyuan.com", new Listener<String>() {            @Override            public void onResponse(String response) {                // TODO Auto-generated method stub                Log.e("jikexueyuan", "请求结果:"+response);            }        }, new ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                // TODO Auto-generated method stub                Log.e("jikexueyuan", "出错啦:"+error.getMessage());            }        });        mQueue.add(mRequest);
只需要简单几句代码,我们就可以实现一个基本的http请求。不再需要顾虑线程等复杂问题。
实现Post请求方式并传递参数
有些时候,出于安全等方面的考虑,我们会选择使用post方式来实现http并且传递相关参数,那么,在Volley当中,我们需要怎么来实现,从哪里设置参数呢?

很简单,Request默认提供2中构造参数,第二种构造参数可以设置我们请求的类型,同时,我们可以重写getParams方法来设置我们所要传递的参数,代码如下:
StringRequest mPostRequest=new StringRequest(Method.POST, "http://www.jikexueyuan.com", new Listener<String>() {            @Override            public void onResponse(String response) {                // TODO Auto-generated method stub                Log.e("jikexueyuan", "请求结果:"+response);            }        }, new ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                // TODO Auto-generated method stub                Log.e("jikexueyuan", "出错啦:"+error.getMessage());            }        }){            @Override            protected Map<String, String> getParams() throws AuthFailureError {                // TODO Auto-generated method stub                Map<String, String> map=new HashMap<String, String>();                map.put("参数名1", "参数值1");                map.put("参数名2", "参数值2");                return map;            }        };        mQueue.add(mPostRequest);请求队列的相关操作:取消、tag设置
当我们发起一些请求之后,我们通常会在请求结束时来做一些页面反馈,包括弹出框提示,数据绑定展示等操作,但是,很多时候,用户往往在等待的时候退出这个页面。这个时候,我们在这个页面发起的请求就没有再继续的必要,如果不停止,还有可能因为在回调中使用activity中的一些对象而导致程序异常。

因此,Volley提供了一个很好的机制,帮助我们来停止请求队列中的某个或者全部请求。

我们可以使用Request的cancel事件或者是RequestQueue的cancelAll("tag")事件来取消,代码如下:
        mLoginRequest.cancel();//取消单个请求        //为Request设置tag        mLoginRequest.setTag("login");        mNewsRequest.setTag("news");        mMsgListRequest.setTag("msg");        mMsgRequest.setTag("msg");        //添加到队列中        mQueue.add(mLoginRequest);        mQueue.add(mNewsRequest);        mQueue.add(mMsgListRequest);        mQueue.add(mMsgRequest);        //取消队列中包含msg标签的请求        mQueue.cancelAll("msg");使用Volley加载网络图片的3种方式
我们在开发软件的过程中,经常都需要加载许多的网络图片,对应这些图片的下载,缓存,读取设置等操作往往令我们十分的头疼,Volley给我们提供了三个十分简单的方法来加载网络图片。
  • ImageRequest
  • ImageLoader
  • NetworkImageView
使用ImageRequest下载图片
ImageRequest是继承了Request的请求,它与其他Request的使用方式一样,通过传递URL参数,就可以返回Bitmap类型的图片数据:
ImageRequest mImageRequest=new ImageRequest("http://s1.jikexueyuan.com/current/static/images/logo.png", new Listener<Bitmap>() {            @Override            public void onResponse(Bitmap response) {                // TODO Auto-generated method stub                mImage.setImageBitmap(response);//显示下载的网络图片            }        }, 1080, 1920, Config.RGB_565, new ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                // TODO Auto-generated method stub                mImage.setImageResource(R.drawable.default_image); //没有读取到图片,显示默认图片            }        });        mQueue.add(mImageRequest);使用ImageLoader将图片直接缓存加载到ImageView控件
Volley提供了ImageLoader类,让我们更方便的实现网络图片的加载,它的用法主要有四步:
  • 1.创建RequestQueue请求队列
  • 2.创建ImageLoader对象
  • 3.获取一个ImageListener对象
  • 4.调用ImageLoader的get方法来进行加载
主要代码如下:
ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {      @Override      public void putBitmap(String url, Bitmap bitmap) {      }      @Override      public Bitmap getBitmap(String url) {          return null;      }  });  ImageListener listener = ImageLoader.getImageListener(imageView,          R.drawable.default_image, R.drawable.failed_image); imageLoader.get("http://s1.jikexueyuan.com/current/static/images/logo.png", listener); 使用NetworkImageView控件直接加载图片
NetworkImageView是直接继承ImageView来实现的,能够在满足ImageView所有功能之外,额外的提供了直接在控件上加载网络图片的功能,使用它需要五个步骤:
  • 1.创建RequestQueue请求队列
  • 2.创建Imageloader对象
  • 3.在xml布局中使用NetworkImageView进行布局
  • 4.获取NetworkImageView控件实例
  • 5.使用控件实例的setImageUrl方法加载网络图片
前面两步都与上面一样,我就不再介绍,直接从第三步开始,我们在xml中添加一个控件:
<com.android.volley.toolbox.NetworkImageView           android:id="@+id/network_image_view"          android:layout_width="200dp"          android:layout_height="200dp"          android:layout_gravity="center_horizontal"          />  
然后在代码中,获取该控件的实例,并且设置默认图片,加载异常图片,以及我们所要加载的网络图片的URL,如下:
NetworkImageView networkImageView = (NetworkImageView) findViewById(R.id.network_image_view); networkImageView.setDefaultImageResId(R.drawable.default_image);  networkImageView.setErrorImageResId(R.drawable.failed_image);  networkImageView.setImageUrl("http://s1.jikexueyuan.com/current/static/images/logo.png",                  imageLoader);  总结
以上就是Volley的一些基本使用方法,熟悉了这些用法,可以大大减少我们的代码量,同时也让我们不用再烦恼线程,缓存这些头疼的问题,大大提高了开发的效率。相信在了解完之后,你就会深深的爱上它。

签到天数: 3 天

连续签到: 1 天

[LV.2]偶尔看看I

0

主题

33

帖子

791

e币
QQ认证
发表于 2015-1-30 15:35:40 | 显示全部楼层
lz的分享很给力,volley确实很实用,不过lz这排版真是醉了,好在你贴出了文章出处,感谢楼主分享精神

签到天数: 5 天

连续签到: 1 天

[LV.2]偶尔看看I

0

主题

91

帖子

659

e币
发表于 2015-1-30 16:15:03 | 显示全部楼层
这个排版格式,,,注意一点哦

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

0

主题

510

帖子

162

e币
发表于 2015-2-6 16:53:37 | 显示全部楼层
这排版这着色简直无法直视啊,

签到天数: 4 天

连续签到: 1 天

[LV.2]偶尔看看I

1

主题

206

帖子

45

e币
发表于 2015-3-24 14:00:06 | 显示全部楼层
...... 排版简直。。。 不过谢谢介绍

签到天数: 3 天

连续签到: 3 天

[LV.2]偶尔看看I

1

主题

29

帖子

76

e币
发表于 2015-3-27 09:15:52 | 显示全部楼层
眼睛看着很吃力哦!不过文章很好

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

0

主题

7

帖子

20

e币
发表于 2015-4-18 10:43:13 | 显示全部楼层
被这排版和颜色弄瞎了

签到天数: 22 天

连续签到: 1 天

[LV.4]偶尔看看III

0

主题

23

帖子

164

e币
发表于 2015-8-5 14:07:28 | 显示全部楼层
这排版我也是醉了

签到天数: 25 天

连续签到: 1 天

[LV.4]偶尔看看III

0

主题

26

帖子

226

e币
发表于 2015-8-5 14:28:06 | 显示全部楼层
lz,这排版着实大气。

该用户从未签到

0

主题

11

帖子

9

e币
发表于 2015-8-13 17:13:34 | 显示全部楼层

nb,这排版着实大气。

签到天数: 9 天

连续签到: 1 天

[LV.3]偶尔看看II

5

主题

147

帖子

670

e币
社区认证会员 QQ认证
发表于 2015-8-21 20:21:55 | 显示全部楼层
哪抄的啊 排版这么乱

签到天数: 54 天

连续签到: 1 天

[LV.5]常住居民I

2

主题

444

帖子

263

e币
发表于 2015-9-2 10:05:02 | 显示全部楼层
.... 排版简直。。。 不过谢谢介绍
*滑动验证:
您需要登录后才可以回帖 登录 | 加入eoe

本版积分规则

推荐阅读
赞助商们

QQ|联系我们|小黑屋|手机版|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210  

GMT+8, 2017-1-20 23:53 , Processed in 0.641015 second(s), 22 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
关闭

扫一扫 关注eoe官方微信