Android网络框架-Volley(一) 初步使用
来源:互联网 发布:开眼角疤痕知乎 编辑:程序博客网 时间:2024/06/02 02:37
先看看DEMO界面:
初步了解Volley:
一直有听Volley网络加载框架,但之前并未使用,想着看到很多大牛在项目中都运用Volley框架来与服务器进行网络通信,想着也得好好看看,不然就觉得自己太Low了。哈哈。关于Volley,封装有两个主要功能,一个是如AsyncHttpClient一样访问网络,只需要几行代码便可以访问网络;一个是能如Universal-Image-Loader一样加载图片。适合去进行数据量不大,但通信频繁的网络操作,而对于大数据网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
项目Demo:
说明项目中用到的获取json字符串的链接来自聚合网数据(大家可以搜搜),但是这个使用次数到额,所以最后展示用的是本地的json文件的数据,其实和网络访问的是一样
的。json数据格式如下:
{ "error_code": 0, "reason": "Success", "result": { "data": [ { "id": 32650, "valid": 0, "body": "", "title": "有一种安排叫做缘,冥冥之中,自有天意。有一张网叫做情,情网恢恢,疏而不漏。有一种爱叫思念,四处弥漫,牵牵绊绊。我在你眼内,你住我心间。" }, { "id": 32651, "valid": 0, "body": "", "title": "人生中变化万千,但是总有一样没有变。那就是我爱你的誓言,一生中的每一天,全部都化成了思念。心中一直在祈愿,愿我们的爱情永远留在心间。" },
1 StringRequest访问网络:
1.1 具体代码如下:
private RequestQueue mQueue; private StringRequest stringRequest; private JsonObjectRequest jsonObjectRequest; private ImageRequest imageRequest; public String url="http://www.baidu.com"; mQueue= Volley.newRequestQueue(this); /*1 StringRequest请求网络*/stringRequest=new StringRequest(url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.i("TAG",response); tv.setText(response); } },new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError volleyError) { Log.i("TAG",volleyError.getMessage()); } });
1.2 过程分析:
访问网络,发送HTTP请求之前需要先获取到一个ReqeustQueue对象,mQueue= Volley.newRequestQueue(this); 源码中是这样调用的,有这样三种构造方法:
public static RequestQueue newRequestQueue(Context context, int maxDiskCacheBytes) { return newRequestQueue(context, (HttpStack)null, maxDiskCacheBytes); } public static RequestQueue newRequestQueue(Context context, HttpStack stack) { return newRequestQueue(context, stack, -1); }/*只传Context参数即可,在UI线程,可用this*/ public static RequestQueue newRequestQueue(Context context) { return newRequestQueue(context, (HttpStack)null); }
其中maxCacheSizeInBytes设置的是缓存的最大字节数,这个参数最终被传到DiskBasedCache方法中:
public DiskBasedCache(File rootDirectory, int maxCacheSizeInBytes) { this.mEntries = new LinkedHashMap(16, 0.75F, true);//数据缓存的数据容器是LinkedHashMap,是一个双向链表 this.mTotalSize = 0L; this.mRootDirectory = rootDirectory;//缓存文件名:File cacheDir = new File(context.getCacheDir(), "volley"); this.mMaxCacheSizeInBytes = maxCacheSizeInBytes; } //构造方法中还会传一个HttpStack接口对象,它封装是一个访问网络的方法,具体实现是它的子类HurlStack,HurlStack中封装了对HttpURLConnection的具体操作; URL parsedUrl1 = new URL(url); HttpURLConnection connection = this.openConnection(parsedUrl1, request);
1.3 最后将StringRequest对象添加到RequestQueue里面。
mQueue.add(stringRequest);
2 使用JsonRequest
2.1 JsonRequest类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。
使用代码:
/*2 JsonObjectRequest--Json数据*///传入四个参数,分别是jsonurl访问链接,jsonRequest,Response.Listener<JSONObject>返回监听对象,new Response.ErrorListener()请求失败监听。 jsonObjectRequest = new JsonObjectRequest(jsonUrl, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d("TAG", response.toString()); // tv.setText(response.toString()); JsonToBean(response);//将json字符串转java实体类; } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } });
2.2 我们来瞧瞧JsonObjectRequest类
JsonObjectRequest继承自JsonRequest,JsonRequest是一个抽象类继承自Request类。Request类实现了Comparable接口,可用来对自定义的class比较大小。
public class JsonObjectRequest extends JsonRequest<JSONObject> {}public abstract class JsonRequest<T> extends Request<T> {}public abstract class Request<T> implements Comparable<Request<T>> {}
3 使用ImageRequest加载网络图片
/*3 ImgaeRequest加载图片*/ imageRequest=new ImageRequest(imageUrl, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { image.setImageBitmap(bitmap); } }, 0, 0, Bitmap.Config.ARGB_8888, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.i("TAG", volleyError.getMessage()); } }); //ImageRequest的构造函数接收六个参数: /** @deprecated */ @Deprecated public ImageRequest(String url, Listener<Bitmap> listener, int maxWidth, int maxHeight, Config decodeConfig, ErrorListener errorListener) { this(url, listener, maxWidth, maxHeight, ScaleType.CENTER_INSIDE, decodeConfig, errorListener); } //第一个参数就是图片的URL地址。 //第二个参数是图片请求成功的回调,这里是UI线程,我们把返回的Bitmap参数设置到ImageView中。 //第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于此值,则会对图片进行压缩,指定成0的话表示不压缩。 //第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。 //第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。
以上,就是对Volley中的RequestQueue,StringRequest,JsonObjectRequest,ImageRequest类的基本了解和使用,最起码要晓得这几个类干嘛用,怎么用。Json的本地文件解析,代码中非常详细,就不介绍了。
Volley源码和jar包下载
项目DEMO代码下载
- Android网络框架-Volley(一) 初步使用
- 安卓网络通信框架Volley学习(一) Volley简介和初步使用
- android Volley请求网络框架的使用(一)
- Android网络框架总结Volley(一)
- Android中的网络框架 Volley(一)
- android网络框架Volley(一)
- Android Volley 框架的使用(一)
- Android Volley 框架的使用(一)
- Android网络通信框架Volley使用技巧汇总(一)
- Volley框架的初步理解(一)
- Android Volley框架使用(一)
- Android Volley框架使用(一)
- Android Volley网络通信框架的使用(一):Volley的简单用法
- Android网络通信Volley框架源码浅析(一)
- Android 网络通信框架Volley完全解析(一)
- [置顶] Android网络通信Volley框架源码浅析(一)
- Android网络框架综述(一)OkHttp、NoHttp、Volley
- Android学习记录20171023--Volley网络框架(一)
- Latex常用语法总结
- JAVA常用文件工具类
- 单例模式的八种写法比较、枚举实现的好处、静态内部类实现单例原理
- 网页页面打印选择的内容
- Android之WebView加载网页
- Android网络框架-Volley(一) 初步使用
- c++内存存储详解
- 设计模式之设计原则
- iOS开发之网络编程篇四:XML,JSon解析
- BZOJ3173~3175 TJOI2013 DAY2
- PCB 阻抗匹配总结
- C#学习笔记---方法
- java电子书很好的下载网站收藏
- js 正则表达式例子