android volley框架详解,android通信框架volley详解(一)

什么是volley?

volley是2014年google在I/O大会上推出的,解决android设备中频繁,但数据量不大的网络访问问题的一个开源框架。它的优势:

1.自动调度网络请求,处理并发与缓存。

2.支持取消已经发出的请求,但不适合大量数据请求。

我们将在几篇文章中讨论如下问题:

1.使用volley建立网络访问与请求数据。

2.请求数据缓存与中断网络请求。

3.建立请求队列与标准网络请求。

4.改造volley,创建自定义网络请求。

获取volley

如果你的机器上有安装git工具。你可以从以下地址clone:

git clone https://android.googlesource.com/platform/frameworks/volley

不过,因为一些原因,你可能无法访问上述地址。

那么您也可以从以下地址下载:

使用Eclipse的同学,可以直接解压并导入到Eclipse,并将Volley项目设置为Library。并在你的项目中引入即可。

使用Android Studio则麻烦一点,最简单的办法,则是使用Eclipse将Volley导出为jar库,然后引入Android Studio。

创建一个网络连接

(与指定连接创建一个StringRequest访问,以访问www.baidu.com为例)。

1.新建一个Android项目,新建Activity。(此处略过)

2.创建一个RequestQueue。

3.创建一个StringRequest

4.将StringRequest添加到RequestQueue。

5.在AndroidManifest.xml中添加必要的权限

在MainAcitvity中代码如下:

public class MainActivity extends Activity implements OnClickListener {

private Button btn_string_request;

//请求队列

private RequestQueue requestQueue;

//访问请求

private StringRequest stringRequest;

//请求地址

private static final String STRINGURL = "http://www.baidu.com";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取请求队列

requestQueue = Volley.newRequestQueue(this);

//实现StringRequest请求

stringRequest = new StringRequest(STRINGURL,

new Response.Listener() {

@Override

public void onResponse(String response) {

Log.i("TAG", response);

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Log.i("TAG", error.getMessage(), error);

}

});

btn_string_request = (Button) findViewById(R.id.btn_string_request);

btn_string_request.setOnClickListener(this);

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.btn_string_request:

requestQueue.add(stringRequest);//添加StringRequest到请求队列

break;

}

}

运行,就可以在logcat中看到百度的返回了,是不是很熟悉的感觉?没错,它返回了百度首页的html代码。

‍获取Json串的网络访问‍

下面的例子,我们将发起一个请求Json数据的访问。

其流程与StringRequest大致相同。不同的地方在于,这一次我们创建的请求对象是JsonObjectRequest

代码如下:

public class MainActivity extends Activity implements OnClickListener {

private Button btn_json_request;

//请求队列

private RequestQueue requestQueue;

//访问请求

private JsonObjectRequest jsonObjectRequest;

//请求地址

private static final String JSONURL = "http://m.weather.com.cn/data/101010100.html";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取请求队列

requestQueue = Volley.newRequestQueue(this);

//实现JsonObjectRequest请求,注意这里跟StringRequest略有不同

stringRequest = new StringRequest(JSONURL, null,

new Response.Listener() {

@Override

public void onResponse(String response) {

Log.i("TAG", response);

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Log.i("TAG", error.getMessage(), error);

}

});

btn_json_request = (Button) findViewById(R.id.btn_json_request);

btn_json_request.setOnClickListener(this);

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.btn_json_request:

requestQueue.add(jsonObjectRequest);//添加JsonObjectRequest到请求队列

break;

}

}

至此,我们便可以请求到来自气象网站的天气信息了。运行,我可以在logcat中看到天气的Json串返回。你有没有发现,使用Volley框架做网络访问要轻松愉快的多。Volley还可以做图片请求,请接着往下看。

获取图片的网络访问

获取网络图片的请求也只是稍有不同,过程则差不多一样

public class MainActivity extends Activity implements OnClickListener {

private Button btn_image_request;

//请求队列

private RequestQueue requestQueue;

//访问请求

private ImageRequest imageRequest;

//请求地址

private static final String IMAGEURL = "http://e.hiphotos.baidu.com/image/pic/item/314e251f95cad1c88b1c422e7d3e6709c93d5117.jpg";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取请求队列

requestQueue = Volley.newRequestQueue(this);

//实现ImageRequest请求

imageRequest = new ImageRequest(IMAGEURL,

new Response.Listener() {

@Override

public void onResponse(Bitmap response) {

// TODO Auto-generated method stub

iv_image.setImageBitmap(response);

}

}, 0, 0, null, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

iv_image.setImageResource(R.drawable.ic_launcher);

}

});

btn_image_request = (Button) findViewById(R.id.btn_image_request);

btn_image_request.setOnClickListener(this);

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.btn_image_request:

requestQueue.add(imageRequest);//添加ImageRequest到请求队列

break;

}

}

自此使用volley访问网络数据的三种方式已经完成。下一篇,我们将讨论如何使用volley访问多张图片,并在本地作图片缓存,以及如何取消数据请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值