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访问多张图片,并在本地作图片缓存,以及如何取消数据请求。
android volley框架详解,android通信框架volley详解(一)相关推荐
- 分布式服务框架学习笔记2 常用的分布式服务框架 与 通信框架选择
传统垂直架构改造的核心就是要对应用进行服务化,服务化改造使用到的核心技术就是分布式服务框架. 分布式服务框架演进 应用从集中式走向分布式 大规模系统架构的设计一般原则就是尽可能地拆分,以达到更好的独立 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,手写RPC~Version07(RPC原理、序列化框架们、网络协议框架们 、RPC 能帮助我们做什么呢、RPC异常排查:ctrl+F搜超时)整起
上次Version06说到了咱们手写迷你版RPC的大体流程, 对咱们的迷你版RPC的大体流程再做几点补充: 为什么要封装网络协议,别人说封装好咱们就要封装?Java有这个特性那咱就要用?好像是这样.看 ...
- Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(二)
文章大纲 引言 一.DirectFragment 1.当选中DirectoryFragment中RecyclerView的Item时 2.选中DirectoryFragment中RecyclerVie ...
- Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)
文章大纲 引言 一.Android Storage Access Framework 二.Storage Access Framework 的主要角色成员 1.Document Provider 文件 ...
- android ui框架详解,多图详解 “Android UI”设计官方教程(二)
编者注:本文为Android的官方开发者博客发了一份幻灯片的翻译文档的第二部分,专门介绍了一些Android UI设计的小贴士,我们在介绍这个幻灯片的第一部分<多图详解 "Androi ...
- 详解Android主流框架不可或缺的基石
探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架 ...
- android中volley通信框架简介
1. 什么是Volley? 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient ...
- 详解Android首选项框架ListPreference
探索首选项框架 在深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写一个应用程序,它提供了一个搜索飞机航班的工具.而且,假设该应用程序的 ...
- 使用AIDL+动态代理+运行时注解+反射 反手撸一套Android跨进程通信框架
IPC 前言 跨进程通信方式 跨进程通信框架 涉及到的技术 使用Request-Response思想 IPCRequest IPCResponse RemoteService 服务端 客户端 附带 项 ...
- Android组件化跨进程通信框架Andromeda解析
关于组件化 随着项目结构越来越庞大,模块与模块间的边界逐渐变得不清晰,代码维护越来越困难,甚至编译速度都成为影响开发效率的瓶颈. 组件化拆分是比较常见的解决方案,一方面解决模块间的耦合关系.将通用模块 ...
最新文章
- 【Indiegogo众筹】$99高性价比RK3399超小型mini主机
- centos7升级自带的php5.4版本到php5.6
- 【7】青龙面板系列教程之任务消息定时推送
- c++工程师面试常见问题之c++中四种cast转换
- Rk3288运行linux,查看“Firefly-rk3288 build linux”的源代码
- python如何爬虫eps数据_入门Python爬虫 -- 解析数据篇
- RabbitMQ集群原理介绍
- 比「数据中台」热门,国外爆火的「数据编织」到底是什么?
- android中级组件,第3章 Android组件--3.3 Android中级组件【含答案】 Android应用开发基础...
- cannot enable both sham-link state-change interface traps
- 推模式下dataset1下显示的是...未找到项目... 问题的解决
- 中国智能汽车行业市场需求趋势与发展战略规划建议报告2022-2028年版
- Excel—“撤销工作表保护密码”的破解并获取原始密码
- maven报错:Failure to transfer xxx.jar from xxx was cached in the local repository.
- 小米平板2可以装鸿蒙系统,搞定LOL?Win10版小米平板2游戏性能实测
- go 实现从服务器导出excel 到浏览器
- 灰灰考研c语言讲义,【灰灰考研】操作系统复习全书.pdf
- 什么是友情链接?友情链接的好处及写法(图文)
- 人人商城之导出excel表
- 插件化框架集成-360插件框架DroidPlug