Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。Volley特别适合数据量不大但是通信频繁的场景。在listView显示图片这方面,使用volley也是比较好的,不必担心OOM错误。

 
 

1.Vollley框架的学习流程:

首先,我们先下载Volley开发所需的jar包,Volley的Jar包下载。在eclipse中新建一个工程,然后导入Volley开发的jar包,接下来我们就可以进行Volley的开发了。

2.最简单的Volley的Get请求

  • 创建一个请求队列:
    1. RequestQueue mQueue = Volley.newRequestQueue(this);
  • 创建一个StringRequest:表示将请求的数据转化为字符串返回(Volley自带仅支持String,Image,JsonObject,JsonArray,之后的文章我会介绍自定义请求的实现),然后我们为他设置listener、errorListener:

    1. StringRequest stringRequest = new StringRequest(Method.GET,
    2. "这里输入URL地址", new Listener<String>() {
    3. @Override
    4. public void onResponse(String response) {
    5. // 处理返回请求返回的结果
    6. }
    7. }, new ErrorListener() {
    8. @Override
    9. public void onErrorResponse(VolleyError error) {
    10. // 请求出错,处理出错程序
    11. }
    12. });
    1.  
  • 将请求加入请求队列中:请求队列允许同时添加多个请求,也就是说,我们一次性可以添加多个请求到请求队列中

    1.  
    1.  
    1. mQueue.add(stringRequest);
  • 这样一个简单的Volley请求就实现了,简单吧。(ImageRequest、JsonObjectRequest和JsonArrayRequest的实现和StringRequest的实现类似,这里就不在多讲了)。

3.Volley的Post请求

  • 其他步骤与Get请求一致,在第二步创建Request的时候,我们只要将传入的第一个参数改为 Method.POST;
  • 如果有Post数据,我们需要重写getParams方法(观察过Volley源码的同学可以看到,源码中getParams函数返回的一个null,所以我们要重写该函数)
    1. StringRequest stringRequest = new StringRequest(Method.POST,
    2. "这里输入URL地址", new Listener<String>() {
    3. @Override
    4. public void onResponse(String response) {
    5. // 处理返回请求返回的结果
    6. }
    7. }, new ErrorListener() {
    8. @Override
    9. public void onErrorResponse(VolleyError error) {
    10. // 请求出错,处理出错程序
    11. }
    12. }) {
    13. @Override
    14. protected Map<String, String> getParams() throws AuthFailureError {
    15. // 在这里设置需要post的参数
    16. Map<String, String> params = new HashMap<String, String>();
    17. params.put("key1", "value1");
    18. params.put("key2", "value2");
    19. return params;
    20. }
    21. };

4.Volley的图片加载缓存机制

  • 创建一个请求队列:

    1. RequestQueue mQueue = Volley.newRequestQueue(this);
    1. 图片缓存类:
    1. import android.graphics.Bitmap;
    2. import android.util.LruCache;
    3.  
    4. import com.android.volley.toolbox.ImageLoader.ImageCache;
    5.  
    6. class BitmapCache implements ImageCache {
    7. private LruCache<String, Bitmap> mCache;
    8.  
    9. public BitmapCache() {
    10. // 这里我们设置10M的缓存大小
    11. int maxSize = 10 * 1024 * 1024;
    12. mCache = new LruCache<String, Bitmap>(maxSize) {
    13. @Override
    14. protected int sizeOf(String key, Bitmap bitmap) {
    15. return bitmap.getRowBytes() * bitmap.getHeight();
    16. }
    17. };
    18. }
    19.  
    20. @Override
    21. public Bitmap getBitmap(String url) {
    22. return mCache.get(url);
    23. }
    24.  
    25. @Override
    26. public void putBitmap(String url, Bitmap bitmap) {
    27. mCache.put(url, bitmap);
    28. }
    29. };
    1.  
  • 创建一个图片加载对象:

    1. ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
  • 创建图片的监听器:

    1. ImageListener listener = ImageLoader.getImageListener(imageView,
    2. R.drawable.ic_launcher, R.drawable.ic_launcher);

    第一个参数表示显示图片的控件,第二个参数表示加载图片时显示的图片,第三个参数表示出错时的图片显示。

  • 加载图片到控件中:

    1. imageLoader
    2. .get("http://a.hiphotos.baidu.com/pic/w%3D230/sign=bf59456cc9fcc3ceb4c0ce30a244d6b7/4afbfbedab64034f80b90b48aec379310a551d0c.jpg",
    3. listener);
  • 以上就是图片加载缓存机制的演示。

 
 
 

5.接下来我会讲一下Volley中自定义的Request的使用,有兴趣的同学可以关注一下。

 

【Andorid开发框架学习】之Volley入门的更多相关文章

  1. 【Andorid开发框架学习】之Mina开发之服务器开发

    下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门.现在,我们来学习一下,Mina的服务器的开发. 一.首先看一下,我的服务器的代码图片:  服务器代码我是在My ...

  2. 【Andorid开发框架学习】之Mina开发之客户端开发

    昨天我们讲到了Mina的基本知识点.如果还有不懂得同学可以看一下我昨天的博客.http://www.cnblogs.com/getherBlog/p/3934927.html今天我着重来讲一下基于Mi ...

  3. 【Andorid开发框架学习】之Mina开发之Mina简介

    今天我将介绍 Apache MINA的基本概念和 API,包括 I/O服务.I/O 会话.I/O 过滤器和 I/O 处理器. 一.MINA的简介 Apache MINA是一个网络应用程序框架,用来帮助 ...

  4. 前端学习 node 快速入门 系列 —— 报名系统 - [express]

    其他章节请看: 前端学习 node 快速入门 系列 报名系统 - [express] 最简单的报名系统: 只有两个页面 人员信息列表页:展示已报名的人员信息列表.里面有一个报名按钮,点击按钮则会跳转到 ...

  5. 从零开始学习jQuery (一) 入门篇

    本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些 ...

  6. Android Volley入门到精通:使用Volley加载网络图片

    在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法.本篇文章中我们即将学习关于Volley更加高级的用法,如何你还没有看过我的上一篇文章的话,建议先去阅读Android Volley完 ...

  7. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  8. WebSocket学习笔记——无痛入门

    WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报  分类: 物联网学习笔记(37)  版权声明:本文为博主原 ...

  9. 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)

    四.经典入门demo:识别手写数字(MNIST) 常规的编程入门有"Hello world"程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序 ...

随机推荐

  1. Java应用中使用ShutdownHook友好地清理现场

    在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.Java中得ShutdownHook提供了比较好的方案. JDK在1.3之后提 ...

  2. 【Learning】容斥原理

    PPT在这里 https://files.cnblogs.com/files/RogerDTZ/%E5%AE%B9%E6%96%A5%E5%8E%9F%E7%90%86.pdf

  3. Android Data Binding(数据绑定)用户指南

    Android Data Binding(数据绑定)用户指南 http://www.jianshu.com/p/b1df61a4df77 https://github.com/LyndonChin/M ...

  4. pg中删除的页是否仍被访问

    昨天看到微信群中,有人提问:pg对于标记为删除的页,是否会扫描到? 今天做了一下测试,发现如果删除的是表的最后连续的几个页(根据ctid来确定数据插入先后,只讨论有insert的情况)中的数据,最后几 ...

  5. Hadoop生态圈-hbase常用命令

    Hadoop生态圈-hbase常用命令 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  6. android listview使用自定义的adapter没有了OnItemClickListener事件解决办法

    在使用listview的时用使用自定义的adapter的时候,如果你的item布局中包含有Button,Checkable继承来的所有控件,那么你将无法获取listview的onItemClickLi ...

  7. IOS方形头像如何变成圆形

    方法一:直接使用UIView对应图层的cornerRadius self.layer.cornerRadius     = CGRectGetWidth(self.bounds)/2.f; self. ...

  8. 递归和静态static

    function sum($n){ if($==1){ return 1; } return $n+sum($n-1); } echo sum(100); ---------------------- ...

  9. 51nod 1181 质数中的质数

    1181 质数中的质数(质数筛法) 题目来源: Sgu 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 如果一个质数,在质数列表中的编号也是质数,那么就称 ...

  10. 如何写一个好bug

      自己的总结,和大家分享~