什么是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详解(一)相关推荐

  1. 分布式服务框架学习笔记2 常用的分布式服务框架 与 通信框架选择

    传统垂直架构改造的核心就是要对应用进行服务化,服务化改造使用到的核心技术就是分布式服务框架. 分布式服务框架演进 应用从集中式走向分布式 大规模系统架构的设计一般原则就是尽可能地拆分,以达到更好的独立 ...

  2. java基础巩固-宇宙第一AiYWM:为了维持生计,手写RPC~Version07(RPC原理、序列化框架们、网络协议框架们 、RPC 能帮助我们做什么呢、RPC异常排查:ctrl+F搜超时)整起

    上次Version06说到了咱们手写迷你版RPC的大体流程, 对咱们的迷你版RPC的大体流程再做几点补充: 为什么要封装网络协议,别人说封装好咱们就要封装?Java有这个特性那咱就要用?好像是这样.看 ...

  3. Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(二)

    文章大纲 引言 一.DirectFragment 1.当选中DirectoryFragment中RecyclerView的Item时 2.选中DirectoryFragment中RecyclerVie ...

  4. Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)

    文章大纲 引言 一.Android Storage Access Framework 二.Storage Access Framework 的主要角色成员 1.Document Provider 文件 ...

  5. android ui框架详解,多图详解 “Android UI”设计官方教程(二)

    编者注:本文为Android的官方开发者博客发了一份幻灯片的翻译文档的第二部分,专门介绍了一些Android UI设计的小贴士,我们在介绍这个幻灯片的第一部分<多图详解 "Androi ...

  6. 详解Android主流框架不可或缺的基石

    探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架 ...

  7. android中volley通信框架简介

    1. 什么是Volley? 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient ...

  8. 详解Android首选项框架ListPreference

    探索首选项框架 在深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写一个应用程序,它提供了一个搜索飞机航班的工具.而且,假设该应用程序的 ...

  9. 使用AIDL+动态代理+运行时注解+反射 反手撸一套Android跨进程通信框架

    IPC 前言 跨进程通信方式 跨进程通信框架 涉及到的技术 使用Request-Response思想 IPCRequest IPCResponse RemoteService 服务端 客户端 附带 项 ...

  10. Android组件化跨进程通信框架Andromeda解析

    关于组件化 随着项目结构越来越庞大,模块与模块间的边界逐渐变得不清晰,代码维护越来越困难,甚至编译速度都成为影响开发效率的瓶颈. 组件化拆分是比较常见的解决方案,一方面解决模块间的耦合关系.将通用模块 ...

最新文章

  1. 【Indiegogo众筹】$99高性价比RK3399超小型mini主机
  2. centos7升级自带的php5.4版本到php5.6
  3. 【7】青龙面板系列教程之任务消息定时推送
  4. c++工程师面试常见问题之c++中四种cast转换
  5. Rk3288运行linux,查看“Firefly-rk3288 build linux”的源代码
  6. python如何爬虫eps数据_入门Python爬虫 -- 解析数据篇
  7. RabbitMQ集群原理介绍
  8. 比「数据中台」热门,国外爆火的「数据编织」到底是什么?
  9. android中级组件,第3章 Android组件--3.3 Android中级组件【含答案】 Android应用开发基础...
  10. cannot enable both sham-link state-change interface traps
  11. 推模式下dataset1下显示的是...未找到项目... 问题的解决
  12. 中国智能汽车行业市场需求趋势与发展战略规划建议报告2022-2028年版
  13. Excel—“撤销工作表保护密码”的破解并获取原始密码
  14. maven报错:Failure to transfer xxx.jar from xxx was cached in the local repository.
  15. 小米平板2可以装鸿蒙系统,搞定LOL?Win10版小米平板2游戏性能实测
  16. go 实现从服务器导出excel 到浏览器
  17. 灰灰考研c语言讲义,【灰灰考研】操作系统复习全书.pdf
  18. 什么是友情链接?友情链接的好处及写法(图文)
  19. 人人商城之导出excel表
  20. 插件化框架集成-360插件框架DroidPlug

热门文章

  1. mysql解决端口占用
  2. 设计模式入门,工厂模式,c++代码实现
  3. Android实现多条Toast快速显示(强制中止上一条Toast的显示)
  4. xshell连接Linxu系统乱码
  5. 【JAVA笔记——术】JAVA LIST DEL遍历方式研究
  6. androidstudio can't run git.exe
  7. (转)自定义listView及其adapter动态刷新
  8. Office 2007无法卸载也无法安装的解决
  9. 【shell基础】条件测试
  10. Django折腾日记(django2.0)