0
点赞
收藏
分享

微信扫一扫

Android 网络连接:Volley(齐射)之简单使用


一、Volley简介

  实现网络连接的方式有很多,如HttpURLConnection、HttpClient但是这二者都是apache推出的,在android中并不非常实用,而且我想google一定也很想有属于自己的网络请求方式而不是借用别人的。终于Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。

Volley又被称为齐射,并发,是Android上的网络通信库。我想看了下面这幅图Google IO的演讲上的配图你可能会更加理解了齐射的含义。

Android   网络连接:Volley(齐射)之简单使用_网络请求

二、为什么使用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)中有空闲线程就执行请求,否则等待空闲线程,之后再执行请求。

注:这里线程池有最大的线程数,不会无限制的创建线程,节约了运行空间。

Android   网络连接:Volley(齐射)之简单使用_网络请求_02

二、方式步骤

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

三、范例

3.1GET方式请求

Android   网络连接:Volley(齐射)之简单使用_网络通信_03

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用于传递参数。

Android   网络连接:Volley(齐射)之简单使用_网络请求_04

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;

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


举报

相关推荐

0 条评论