android 网络编程--Volley(一)
2016-10-10 23:15
169 查看
一、Volley 简介
Volley 为google 在2013年推出的网络通信框架。非常适合去进行数据量不大,但通信频繁的网络操作,如新闻页面的刷新。但是在下载等大数据量下的表现非常差。二、Volley总览
在Volley中提供了常用的网络通信方式。如用于返回字符串的StringRequest,返回JSON的JsonRequest、JsonObjectRequest,返回图片的ImageRequest。当然,我们也可以自己按照自己的需求来定义返回的类型。
在使用这些XXRequest之前,必须先新建一个RequestQueue。然后将这个XXRequest的实例添加进RequestQ
ueue中,就可以返回相应的值。
4000 RequestQueue mQueue = Volley.newRequestQueue(context);
RequestQueue不需要再每次一的HTTP通信中新建,只需要在通信的activity中建立一个即可。
StringRequest使用,以百度首页为例:
StringRequest stringRequest = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } });
将stringRequest实例添加进mQueue中,mQueue.add(stringRequest )。 在onRespinse(String res
ponse) 这个回调方法中会返回http通信的结果,如果通信失败,则会返回onErrorResponse的回调。
采用同样的方法可以让其返回json格式、图片格式的数据。代码如下:
返回json数据:
protected void MyJsonObjectResult() { JsonObjectRequest mJsonObjectResult = new JsonObjectRequest(Request.Method.GET, url2, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // TODO Auto-generated method stub Log.d("TAG", response.toString());// <span style="font-family: Consolas, "Courier New", Courier, mono, serif; white-space: pre-wrap;">此处从onResonse 回调中可以获得指定url的json数据</span> } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub Log.e("TAG", error.getMessage(), error); } }); mQueue.add(mJsonObjectResult); }
<span style="white-space:pre"> </span>返回图片数据,这里使用了ImageLoader 和一个Volley中的自定义控件NetworkImageView。在这两种的使用中都支持图片缓存,这里通过自定义一个ImageCache接口来实现。
protected void MyImageLoaderResult() {ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.defaultiamge, R.drawable.failed);imageLoader.get(url3, listener);}protected void MyNetworkImageViewResult() {ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());networkImageView.setDefaultImageResId(R.drawable.defaultiamge);networkImageView.setErrorImageResId(R.drawable.failed);networkImageView.setImageUrl(url3,imageLoader);}public class BitmapCache implements ImageCache {private LruCache<String, Bitmap> mCache;public BitmapCache() {int maxSize = 5 * 1024 * 1024;// 定义缓存大小5MmCache = new LruCache<String, Bitmap>(maxSize) {@Overrideprotected int sizeOf(String key, Bitmap bitmap) {return bitmap.getRowBytes() * bitmap.getHeight();}};}@Overridepublic Bitmap getBitmap(String url) {// TODO Auto-generated method stubreturn mCache.get(url);}@Overridepublic void putBitmap(String url, Bitmap arg1) {// TODO Auto-generated method stubmCache.put(url, arg1);}}
除了以上的Volley提供的返回值之外,我们还可以自定义需求的返回数据类型。下面以返回一个XML自定义类型的方式基本都是一样的,需要继承一个Request<T> ,这里因为是需要XML数据,所以选择了XmlPullParser按照String的方式来写就行。
protected void MyXmlResult() {XmlRequest mXmlRequest = new XmlRequest(Request.Method.GET, url4, new Response.Listener<XmlPullParser>() {@Overridepublic void onResponse(XmlPullParser response) {// TODO Auto-generated method stubtry {int eventType = response.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_TAG:String nodeName = response.getName();if ("city".equals(nodeName)) {Log.d("TAG", "pName is " + response.getAttributeValue(0));}break;}eventType = response.next();}} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}, new Response.ErrorListener(){@Overridepublic void onErrorResponse(VolleyError error) {// TODO Auto-generated method stubLog.e("TAG", error.getMessage(), error);}});}本文的例子在下载地址GIT: https://github.com/everyhappy/VolleyDemos/tree/VolleyDev
相关文章推荐
- Android网络编程五:(5)Volley功能介绍
- Android网络编程框架推荐-Volley
- Android网络编程之Volley开发笔记
- Android网络编程五:(1)Volley简介
- Android网络编程五:(7)Volley之ImageCache
- Android网络编程五:(3)Volley实例
- Android网络编程五:(6)Volley之缓存实现
- android网络编程 三(Volley)
- Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)
- Android网络编程五:(4)Volley使用说明
- Android网络编程之Http通信
- 云平台编程与开发(五):开发Android网络游戏的一点探讨
- android通过webservice进行网络编程实例
- Android网络服务开发之http编程
- Android网络编程实践之旅(三):网络状态检测(续)
- Android 的网络编程
- android 网络编程 HttpGet类和HttpPost类使用详解
- Android网络编程实践之旅(二):基于Socket的网络通信
- 黑马程序员Java培训和Android培训_网络编程
- android HttpURLConnection编程详解,获取网络图片,html代码查看