热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Volley的使用(一)get请求和获取网络图片

什么是Volley以及为什么使用Volley在我们android开发过程中不可避免的要进行网络访问,android为我们提供了两种方式来访问网络:Ht

什么是Volley以及为什么使用Volley

在我们android开发过程中不可避免的要进行网络访问,android为我们提供了两种方式来访问网络:HttpURLConnection和HttpClient
而使用这两种类来访问网络的时候仍然需要大量的代码来实现,而且对于不熟练的人来说很容易出错。
并且由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以在Android 5.1中,HttpClient类已被废弃。
谷歌为了使网络访问更加简易在2013年推出了Volley。

volley的优点和不足:

1、默认Android2.3及以上HttpURLConnection(因为2.3以下这个类有很多Bug),2.3以下使用HttpClient;
2、缓存机制优秀;
3、请求队列可以针对优先级排序;
4、提供多种取消机制;
5、图片加载异常简单(这项比较重要,不需要考虑内存优化和图片加载时的内存溢出);
6、使用非常简单;
7、官方提供,必须是精品啊。

不足:Volley在轻量的网络访问中表现优秀,但是对于流媒体和大数据文件的传输支持不够。

基于以上种种原因我们使用Volley。

如何使用Volley?

首先我们要下载Volley。
谷歌gitbut地址:
https://android.googlesource.com/platform/frameworks/volley
也可以从我的csdn资源上下载:
http://download.csdn.net/download/baidu_31093133/9511419
将下载的jar包复制到android工程的libs目录下。

首先说一下volley的requestQueue,使用volley的第一步就是建立一个这样的请求队列用于存放自己的网络请求。
通常我们会在application里建立一个全局的请求队列。
如下:

public class MyApplication extends Application {//建立一个请求队列public static RequestQueue queues;@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();//实例化一个请求队列queues = Volley.newRequestQueue(getApplicationContext());} //建立方法返回请求队列public static RequestQueue getHttpQueues() {return queues;}
}

使用StringRequest:

//定义一个url
String url = " http://op.juhe.cn/onebox/weather/query?cityname=%E6%B8%A9%E5%B7%9E&key=5fc2b142029b1b0d371d5449a8b8927d";
//定义一个StringRequest
StringRequest request = new StringRequest(Method.GET, url, newListener() {// 添加请求成功监听@Overridepublic void onResponse(String response) {Toast.makeText(MainActivity.this, "网络访问成功"+,Toast.LENGTH_LONG).show();}}, new Response.ErrorListener() {// 添加请求失败监听@Overridepublic void onErrorResponse(VolleyError error) {Toast.makeText(MainActivity.this, error.toString(),Toast.LENGTH_LONG).show();}});// 设置请求的tag标签,便于在请求队列中寻找该请求request.setTag("lhdGet");// 添加到全局的请求队列MyApplication.getHttpQueues().add(request);

使用JsonObjectRequest:

//同样实例化一个JsonObjectRequestJsonObjectRequest request2 = new JsonObjectRequest(Method.GET, url, null, new Response.Listener() {@Overridepublic void onResponse(JSONObject response) {Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_LONG).show();}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();}});// 设置请求的tag标签,便于在请求队列中寻找该请求request2.setTag("lhdGet2");// 添加到全局的请求队列MyApplication.getHttpQueues().add(request2);

StringRequest和JsonObjectRequest的区别:


当我们不清楚网络访问的返回值的时候就使用StringRequest,如果知道返回值是一个Json格式的文件就使用JsonObjectRequest


Volley获取网络图片:


1、ImageRequest

1、创建一个RequestQueue
2、创建一个ImageRequest
3、将ImageRequest添加到RequestQueue
事实上StringRequest,JsonRequest和ImageRequest都是继承自Request的所以它们的用户也都类似。

示例:

ImageRequest imageRequest = new ImageRequest( http://img1.imgtn.bdimg.com/it/u=2680373034,1460593141&fm=21&gp=0.jpg", new Response.Listener() { @Override //请求成功回调public void onResponse(Bitmap response) { //加载网络图片imageView.setImageBitmap(response); } //0,0表示最大宽和高 RGB_565是颜色模式}, 0, 0, Config.RGB_565, new Response.ErrorListener() { @Override //请求失败回调public void onErrorResponse(VolleyError error) { //设置访问失败加载的图片 imageView.setImageResource(R.drawable.default_image); } });

最后将这ImageRequest对象添加到RequestQueue里。

2、ImageLoader

ImageLoader的内部是使用ImageRequest来实现的,但它ImageLoader更高效,因为它不仅可以缓存图片,还可以防止重复发送同样的请求。

使用步骤:

1、创建一个RequestQueue
2、创建一个ImageLoader
3、自定义一个类继承ImageCache
4、创建一个ImageListener
5、加载网络图片

1、创建RequestQueue同上面
2、创建ImageLoader
示例:

ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCash());

其中自定义BitmapCash()类是继承ImageCache的实现类
3、自定义BitmapCash类继承ImageCache
BitmapCash:

public class BitmapCash implements ImageCache{public LruCachecache;//将缓存图片的大小设置为10Mpublic int max = 10*1024*1024;public BitmapCash () {cache = new LruCache(max){@Overrideprotected int sizeOf(String key, Bitmap value) {return value.getRowBytes()*value.getHeight();}};}//这里会获取到图片@Overridepublic Bitmap getBitmap(String url) {return cache.get(url);}@Overridepublic void putBitmap(String url, Bitmap bitmap) {// TODO Auto-generated method stubcache.put(url, bitmap);}
}

4、//创建ImageListener
ImageListener listener =
//顶一个参数是加载图片的imageView控件
ImageLoader.getImageListener(imageView,
//第二个参数是默认图片 第三个是访问失败时加载图片
R.drawable.ic_launcher, R.drawable.ic_launcher);
5、获取图片。第一个参数是图片地址,第二个是ImageListener 然后使用loader.get(url, listener);来获取网络图片。

如果想指定图片的宽和高
也可以使用loader.get(url, listener, 200, 200);

有了以上的基础,相信大家对Volley网络访问有一定的了解了吧,接下来描述会简洁一点。

3、NetworkImageView

这是volley提供的一个自定义控件,具备imageview控件的所有功能,并自带加载网络图片的功能。

NetworkImageView使用步骤:

  1. 创建一个RequestQueue
  2. 创建一个ImageLoader
  3. 在布局文件中添加一个NetworkImageView控件
  4. 代码中实例化该控件的
  5. 设置要加载的图片地址

1、2步同上
3、步骤直接在xml布局文件使用该控件
4、使用findviewById()实例化控件
5、获取图片:

String url = "http://img1.imgtn.bdimg.com/it/u=2680373034,1460593141&fm=21&gp=0.jpg";
//设置默认图片
imageView.setDefaultImageResId(R.drawable.ic_launcher);
//设置访问失败的图片
imageView.setErrorImageResId(R.drawable.ic_launcher);
//开始获取。url为图片的地址。loader为
imageView.setImageUrl(url, loader);


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
author-avatar
手机用户2502852661
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有