备注: 本笔记是参照了 http://blog.csdn.net/ysh06201418/article/details/46443235 学习以后写下的json
简介: Volley是google官网退出的一种流行的网络请求框架,封装了Android繁琐的httpclient和HttpUrlConnection,使得咱们没必要要写更多繁琐的代码就可以很好的实现网络通讯,同时AsyncHttpClient和ImageLoader集成于一身,既能够像AsyncHttpClient同样很是简单地进行HTTP通讯,也能够像Universal-Image-Loader同样轻松加载网络上的图片。除了简单易用以外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是很是适合去进行数据量不大,但通讯频繁的网络操做,而对于大数据量的网络操做,好比说下载文件等,Volley的表现就会很是糟糕。数组
Volley的用法:网络
初始化:app
new 一个RequestQueue实例,而后把一些request添加上去便可框架
private RequestQueue mQueue = Volley.newRequestQueue(this);
1. StringRequest的用法:ide
1 StringRequest request = new StringRequest("http://www.baidu.com", new Response.Listener<String>() { 2 @Override 3 public void onResponse(String response) { 4 requestTextView.setText(response); 5 6 } 7 },new Response.ErrorListener(){ 8 @Override 9 public void onErrorResponse(VolleyError error) { 10 11 } 12 }); 13 mQueue.add(request);
这样的话,一个最基本的HTTP发送与响应的功能就完成了。你会发现根本还没写几行代码就轻易实现了这个功能,主要就是进行了如下三步操做:post
1. 建立一个RequestQueue对象。性能
2. 建立一个StringRequest对象。学习
3. 将StringRequest对象添加到RequestQueue里面。大数据
上面的是get请求,若是是post请求,那又该怎样实现呢,Volley有本身的实现方法:StringRequest中并无提供设置POST参数的方法,可是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法天然也就有了,咱们只须要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就能够了,具体以下:
1 StringRequest request = new StringRequest(Request.Method.POST, "", new Response.Listener<String>() { 2 @Override 3 public void onResponse(String response) { 4 5 } 6 }, new Response.ErrorListener() { 7 8 9 @Override 10 public void onErrorResponse(VolleyError error) { 11 12 } 13 }) { 14 @Override 15 protected Map<String, String> getParams() throws AuthFailureError { 16 return super.getParams(); 17 } 18 }; 19 mQueue.add(request);
学完了最基本的StringRequest的用法,咱们再来进阶学习一下JsonRequest的用法。相似于StringRequest,JsonRequest也是继承自Request类的,不过因为JsonRequest是一个抽象类,所以咱们没法直接建立它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。
1 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("", null, new Response.Listener<JSONObject>() { 2 @Override 3 public void onResponse(JSONObject response) { 4 5 } 6 }, new Response.ErrorListener() { 7 @Override 8 public void onErrorResponse(VolleyError error) { 9 10 } 11 });
3.ImageRequest的用法
1 ImageRequest ir = new ImageRequest("http://www.dpfile.com/s/res/app-touch-icon-152x152.ee6d0c24fc2de0f9a62b6cc9e6720393.png", new Response.Listener<Bitmap>() { 2 @Override 3 public void onResponse(Bitmap response) { 4 // imageView.setImageBitmap(response); 5 ImageView iv = new ImageView(VolleyActivity.this); 6 // iv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 7 iv.setImageBitmap(response); 8 imageLayout.addView(iv); 9 } 10 }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { 11 @Override 12 public void onErrorResponse(VolleyError error) { 13 14 } 15 }); 16 mQueue.add(ir);