一、Volley简介
  实现网络连接的方式有很多,如HttpURLConnection、HttpClient但是这二者都是apache推出的,在android中并不非常实用,而且我想google一定也很想有属于自己的网络请求方式而不是借用别人的。终于Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。 
 Volley又被称为齐射,并发,是Android上的网络通信库。我想看了下面这幅图Google IO的演讲上的配图你可能会更加理解了齐射的含义。 

二、为什么使用Volley
2.1原因
1、Volley是google官方推出的网络通信方式,性能更稳定和强劲。 
 2、重要的一点还有Volley的架构设计 
 3、高效的get与post方式的数据请求交互,通信更简单,快捷。 
 4、网络图片加载与缓存
2.2功能
JSON,图像等的异步下载;
网络请求的排序(scheduling)
网络请求的优先级处理
缓存
多级别取消请求
和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
2.3Volley设计思想
Volley使用了线程池来作为基础结构,主要分为主线程,cache线程和network线程。 
 主线程和cache线程都只有一个,而NetworkDispatcher线程可以有多个,这样能解决比并行问题。 
 工作流程:每次发送一个请求放到缓存中(请求队列),查看请求队列中如果有该请求整在执行直接通过cache读取出,如果没有的话就进入线程池,如果线程池(Executor)中有空闲线程就执行请求,否则等待空闲线程,之后再执行请求。 
 注:这里线程池有最大的线程数,不会无限制的创建线程,节约了运行空间。 

二、方式步骤
1、添加jar包和网络权限 
 eclipse:直接复制volley的jar包到libs下面 
 AS:app—>open Mudlue settings—>Dependencies—>+加进即可。 
 2、创建请求队列RequestQueue 
 3、创建StringRequest\JsonRequest\JsonArrayRequest 
 4、将请求加入到RequestQueue 
三、范例
3.1GET方式请求

public class MainActivity extends Activity implements OnClickListener{
     private Button mbtn_con;
     private TextView mtext_context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mbtn_con=(Button) findViewById(R.id.btn);
        mtext_context=(TextView) findViewById(R.id.textview_context);
        mbtn_con.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn:
            RequestQueue queue=Volley.newRequestQueue(getApplicationContext());
            StringRequest request=new StringRequest(0, "http://www.baidu.com", new Listener<String>() {
                @Override
                public void onResponse(String arg0) {
                    mtext_context.setText(arg0);
                }
            }, new ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError arg0) {
                    mtext_context.setText(arg0.toString());
                }
            });                 
            //将请求加入请求队列     
            queue.add(request);
            break;
        default:
            break;
        }
    }3.2POST方式请求(在本地Serverlet服务器测试)
post请求由于参数不在url中,我们需要创建hashMap用于传递参数。 

case R.id.btn:
RequestQueue queue=Volley.newRequestQueue(getApplicationContext());
StringRequest request=new StringRequest(Request.Method.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", new Listener<String>() {
@Override
public void onResponse(String arg0) {
mtext_context.setText(arg0);
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
mtext_context.setText(arg0.toString());
}
}){
@Override
protected Map<String, String> getParams()
throws AuthFailureError {
HashMap<String, String> map=new HashMap<String, String>();
map.put("username", "zhangsandege");
return map;
}
};
queue.add(request);
break;
注:其他的请求步骤也是一样的。
                










