一、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;

注:其他的请求步骤也是一样的。

更多相关文章

  1. Android(安卓)C++ 多线程
  2. android之多线程工作(一)AsyncTask .
  3. Java简单模拟Android中Handler-Message机制
  4. android数据存取的四种方式
  5. Android读书笔记(11)—— Android的线程和线程池
  6. Android中的RxJava
  7. Android(安卓)ANR异常及解决方法
  8. android view 的移动的几种方式
  9. android耗时任务_handler

随机推荐

  1. Service 详解
  2. android事件拦截处理机制详解
  3. 原创Android中应用界面布局总结
  4. Android的源代码结构 && 一些常用术语 &&
  5. Android中采用Pull解析器对XML文件进行解
  6. Android处理多种屏幕尺寸
  7. Android中实现登陆界面的记住密码功能
  8. Preference组件探究之Base,Support及Andr
  9. Android(安卓)小项目之--SQLite 使用法门
  10. 基于开源框架Glide加载Gif资源图到Androi