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

 
 

1.Vollley框架的学习流程:

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

2.最简单的Volley的Get请求

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

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

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

3.Volley的Post请求

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

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

  • 创建一个请求队列:

    RequestQueue mQueue = Volley.newRequestQueue(this);
  • 图片缓存类:
    import android.graphics.Bitmap;
    import android.util.LruCache; import com.android.volley.toolbox.ImageLoader.ImageCache; class BitmapCache implements ImageCache {
    private LruCache<String, Bitmap> mCache; public BitmapCache() {
    // 这里我们设置10M的缓存大小
    int maxSize = 10 * 1024 * 1024;
    mCache = new LruCache<String, Bitmap>(maxSize) {
    @Override
    protected int sizeOf(String key, Bitmap bitmap) {
    return bitmap.getRowBytes() * bitmap.getHeight();
    }
    };
    } @Override
    public Bitmap getBitmap(String url) {
    return mCache.get(url);
    } @Override
    public void putBitmap(String url, Bitmap bitmap) {
    mCache.put(url, bitmap);
    }
    };
  • 创建一个图片加载对象:

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

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

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

  • 加载图片到控件中:

    imageLoader
    .get("http://a.hiphotos.baidu.com/pic/w%3D230/sign=bf59456cc9fcc3ceb4c0ce30a244d6b7/4afbfbedab64034f80b90b48aec379310a551d0c.jpg",
    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. 【bzoj2594】 Wc2006—水管局长数据加强版

    http://www.lydsy.com/JudgeOnline/problem.php?id=2594 (题目链接) 题意 给出一个带边权的无向简单,要求维护两个操作,删除${u,v}$之间的连边: ...

  2. java 操作命令行

    目的:用java进行调用ab压测 window: cmd ab.exe linux: sh  ab.sh 命令: abs -n 500 -c 10 https://www.baidu.com/ > ...

  3. process.nextTick,Promise.then,setTimeout,setImmediate执行顺序

    1. 同步代码执行顺序优先级高于异步代码执行顺序优先级: 2. new Promise(fn)中的fn是同步执行: 3. process.nextTick()>Promise.then()> ...

  4. 2018-2019 ACM-ICPC ECfinal I. Misunderstood … Missing

    题目链接 首先有两个个属性值:\(A,D\),其中\(A\)表示目前攻击力,\(D\)表示每回合攻击的增量. 现在一共有\(n\)个回合,每一回合\(i\),可以有以下三种操作: 1.进行攻击,造成\ ...

  5. Python pytagcloud 中文分词 生成标签云 系列(一)

    转载地址:https://zhuanlan.zhihu.com/p/20432734工具 Python 2.7 (前几天试了试 Scrapy 所以用的 py2 .血泪的教训告诉我们能用 py3 千万别 ...

  6. R语言:克里金插值

    基于空间自相关,R语言克里金插值 library(gstat) Warning message: In scan(file = file, what = what, sep = sep, quote ...

  7. django中django.conf.urls.url函数

    在urls.py文件中,我们经常会看到类似于这样的代码: urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_arc ...

  8. jQuery常用知识总结

    jQuery常用知识总结 简介 选择器 属性操作 jQuery() each event事件 jQuery扩展 一.简介 What is jQuery jQuery is fast small and ...

  9. Hadoop生态圈-hive编写自定义函数

    Hadoop生态圈-hive编写自定义函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  10. 我购买byd的几点逻辑

    1.伯克希尔哈撒韦长期看好byd不是无道理的,每次转型都是那么的成功,说明管理层很好. 2.2015年6月员工持股计划均价55元,目前48元. 3.新能源汽车龙头. 4.云轨解决了小城市建设地铁过于浪 ...