8.3 网络通信 Volley
AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。
Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。
Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
基础应用—StringRequest---发送HTTP请求和接收响应
1. 首先需要先获得RequestQueue对象:
RequestQueue mQueue = Volley.newRequestQueue(context);
RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。
2. 接下来为了要发出一条HTTP请求,我们还需要创建一个StringRequest对象,如下所示:
StringRequest stringRequest = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() {
public void onResponse(String response) { Log.d("TAG", response); }
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) { Log.e("TAG", error.toString() ); }
});
可以看到,这里new出了一个StringRequest对象,StringRequest的构造函数需要传入三个参数,第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。
3. 最后,将这个StringRequest对象添加到RequestQueue里面:mQueue.add(stringRequest);
此外还有:(替换Response.Listener相应数据类型:JSONObject/Bitmap)
1) JsonRequest:抽象类,有JsonObjectRequest和JsonArrayRequest两个子类,用于请求JSON数据和数组。
2) ImageRequest:加载网络图片
3) ImageLoader:也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。由于ImageLoader已经不是继承自Request的了,所以它的用法也和我们之前学到的内容有所不同,总结起来大致可以分为以下四步:
A. 创建一个RequestQueue对象,同上。
B. 创建一个ImageLoader对象:
ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {
public void putBitmap(String url, Bitmap bitmap) { }
public Bitmap getBitmap(String url) { return null; }
});
C. 获取一个ImageListener对象:
ImageListener listener = ImageLoader.getImageListener(imgView, R.drawable.def_image, R.drawable.failed_image);
D. 调用ImageLoader的get()方法加载网络上的图片:
imageLoader.get("http://img.my.csdn...jpeg", listener,200,200); //第三四个参数限制图片大小,可选
4) NetworkImageView:是一个自定义控制,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能:
A. 在布局中直接使用<com.android.volley.toolbox.NetworkImageView>
B. 得到了NetworkImageView控件的实例之后,我们可以调用它的setDefaultImageResId()、setErrorImageResId() setImageUrl()方法来分别设置加载中/加载失败以及目标图片的URL地址
5) 自定义Request:
可以参考StringRequest自定义其他的请求:
如 XMLRequest:用于请求一条XML格式的数据,在Listener中使用XmlPullParser参数。
GsonRequest:用于解析Gson数据,需要导入Gson包。
8.3 网络通信 Volley的更多相关文章
- Android网络通信Volley框架源代码浅析(三)
尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析.相信大家对于Volley有了初步的认识,可是假设想更深入的理解 ...
- Android网络通信Volley框架源代码浅析(二)
尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列: ...
- Android网络通信Volley框架源代码浅析(一)
尊重原创http://blog.csdn.net/yuanzeyao/article/details/25837897 从今天開始,我打算为大家呈现关于Volley框架的源代码分析的文章,Volley ...
- Android技术点
一.四大组件 1.1 Activity 1.2 Broadcast 1.3 Content Provider 1.4 Service 1. Binder 2. Messager 3. AIDL ...
- Android常用组件
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- Android常用组件【转】
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- Android经常使用开源组件汇总
http://www.cnblogs.com/scige/p/3456790.html UI相关 图片 Android-Universal-Image-Loader:com.nostra13.univ ...
- android开发常用组件【持续更新中。。。】
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- Android 网络通信框架Volley简介
1.1. Volley引入的背景在以前,我们可能面临如下很多麻烦的问题. 比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdapter#getView()里开始图像的读取. 通过Async ...
随机推荐
- iOS启动页设置
点击项目->TARGETS->App Icons and Launch Images->Launch Images Source->Use Asset Catalog...-& ...
- Android之ProgressBar
今天复习一下以前的知识,补充一下ProgressBar控件 progressBar是进度条组件,通常用于用户展示某个耗时操作完成的进度,而不让用户感觉是程序失去了响应,从而更好地提升用户界面的友好性. ...
- 关于Servlet手动配置web.xml部分代码
<servlet> <!-- 文件名 --> <servlet-name>deleteServlet</servlet-name> <!-- 文件 ...
- Python之字符串小代码解析
本篇只是拿一段代码来对python中的字符串的一些使用做解释,来让大家更加了解python Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25: ...
- django 1.8 评论库comments配置问题
comments库是django框架内置的评论库,可以快速搭建网站需要的评论系统.不过1.8的配置和1.6的出现了一点小小配置,由于刚刚接触,按照网上的文档配置,需要在 settings.py的INS ...
- django+nginx+xshell简易日志查询,接上<关于《rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>》的反思>
纠正一下之前在<关于<rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>>的反思>中说到的PHP+MySQL太慢,这里只是说我技术不好,没 ...
- 重启php-fpm的方法
ps -ef|grep "php-fpm: master process"|grep -v grep|awk '{print $2}'|xargs kill -USR2 优点: ...
- CSS浏览器兼容问题总结
为什么会出现浏览器兼容问题? 由于各大主流浏览器是不同的厂家开发的,所以使用的核心也不相同,架构代码很难重合,就会产生各种各样的bug. IE6中常见的css解析bug 1)默认高度(IE6)部分块元 ...
- Step by Step 配置使用HTTPS的ASP.NET Web应用[转载]
原创地址:http://www.cnblogs.com/jfzhu/p/4064654.html 转载请注明出处 有关HTTPS.SSL以及SSL证书的工作原理,参见 <HTTPS那些事(一)H ...
- Markdown: 用写代码的思维写文档
作者:吴香伟 发表于 2014/08/07 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 本文不讲解Markdown的语法规则,只关注它带来的好处以及我使用的方 ...