文档章节

android通信框架volley详解(一)

套马的汉子们
 套马的汉子们
发布于 2014/12/10 20:24
字数 1037
阅读 210
收藏 0

什么是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

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

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

http://download.csdn.net/detail/u011213647/7412215

使用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中添加必要的权限

<uses-permission android:name="android.permission.INTERNET" />

在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<String>() {

		@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<String>() {

		@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<Bitmap>() {
		@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访问多张图片,并在本地作图片缓存,以及如何取消数据请求。

© 著作权归作者所有

套马的汉子们
粉丝 2
博文 8
码字总数 15827
作品 0
深圳
私信 提问
修改源码,使volley框架下支持发送和读取cookie

本文为原创,转载请注明出处,否则将依法追究版权 修改源码,让不支持cookie发送的volley框架支持cookie 我们平时开发android应用都需要用到网络技术,通常采用http协议来发起请求并接受网络...

刘小米
2014/12/29
10.3K
11
Android 网络开发框架的选择

当我们开发企业级应用的时候,一般都会选择使用已经封装好的http框架。开源的比较流行的有: 1、volley 2、android-async-http 3、retrofit 4、okhttp 5、androidquery 6、AndroidAsync 等。...

jdroid
2014/04/20
4.4K
2
网络请求框架---Volley

去年的Google I/O大会为android开发者带来了一个网络请求框架,它的名字叫做Volley。Volley诞生的使命就是让Android的网络请求更快,更健壮,而且它的网络通信的实现是基于HttpURLConnection...

Jack_1900
2014/08/01
6.1K
2
Android Volley框架的几种post提交请求方式

首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Volley的...

gaolu
2014/08/08
171
1
Android 网络通信框架Volley简介(Google IO 2013)

什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Vol...

mingxun
2013/11/06
65
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部