android高级控件之Volley

volley 控件 Google I/O 2013 – Volley: Easy, Fast Networking for Android 立即下载
一、Volley简介
  • 直接用HttpURLConnection和HttpClient进行网络请求比较复杂,不进行封装的话,会有很多重复代码
  • 2013年Google I/O大会上推出了一个新的网络通信框架——Volley,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕
二、Volley的使用场景(简单信息的数据加载,图片等)

三、导入Volley(可以直接将volley的源码拷贝到工程的相应的目录下)
四、 使用Volley
  • 三种基本网络请求的实现
     第一步: 新建请求队列:
       RequestQueue mQueue = Volley.newRequestQueue(context);  //一个工程用一个请求队列即可,可以建一个自定义的application,并在清单文件中注册
     第二步:新建request
    第三步:把request加入请求队列
  1. StringRequest        
    Get请求:
  
  
       //应该保证一个运用一个对象,通常我们会将这种需要统一的对象放在自定义的application里面(需要在清单文件中注册,在application标签下的name
        //属性,将我们自定义的application导入),
       //这样就保证了整个项目中的这个对象就是同一个了  
	mRequestQueue = Volley.newRequestQueue(this);

       public void stringGetRequest() {
       //新建一个字符串网络请求
       //第一个参数:url--请求的网址
       //第二个参数:响应监听
       //第三个参数:错误监听
	    StringRequest request = new StringRequest(
	    "https://www.baidu.com/",
             new Response.Listener<String>() {
	     @Override
	      public void onResponse(String response) {
                    Log.d("qfstringRequest",response);
	      }
               },
            new Response.ErrorListener() {
	@Override
	public void onErrorResponse(VolleyError error) {

                }
            });

	//把请求加入队列
	requestQueue.add(request);
	}
post请求:
   
StringRequest postStringRequest = new StringRequest(
	Request.Method.POST,//请求方式
	"http://a1.greentree.cn:8029/Api/index.php/search/searchHotel",//请求地址
        new Response.Listener<String>() {//请求成功后返回的结果
	@Override
	public void onResponse(String response) {
                Log.d("VolleyLesson",response);
	}
        },
        new Response.ErrorListener() {//请求失败后返回的错误信息
	@Override
	public void onErrorResponse(VolleyError error) {
                Log.d("VolleyLesson",error.getMessage());
	}
        }
	){
        /**
          *封装请求参数,post请求需要把请求参数另外存储,而get请求只需要拼接到请求地址后面就可以,当然也可以使用封装参数的方法
          *
          */
         @Override
   	 protected Map<String, String> getParams() throws AuthFailureError 	 {
         Map<String,String> mapParam =  new HashMap<String,String>();
         // 设置参数
         // pagesize 每页多少行
         mapParam.put("pagesize", "20");
         // pageindex 页码
         mapParam.put("pageindex", "2");
         return mapParam;
    	}
	};
	mRequestQueue.add(postStringRequest);
	
	取消重复的请求,这样能够防止用户连续点击的时候,只发送一次请求,这样即减轻网络加载的负担,也减少流量的使用
	mRequestQueue.cancelAll("test");
	postStringRequest.setTag("test");


2.JsonRequest
    JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它    
    的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和    JsonArrayRequest
   
        JsonRequest jsonRequest = new JsonObjectRequest	(Request.Method.POST,//请求方式
	"http://a1.greentree.cn:8029/Api/index.php/search/searchHotel",//请求的地址
 	new Response.Listener<JSONObject>() {//请求成功的监听
	@Override
	public void onResponse(JSONObject response) {//response就是返回的json数据
                Log.d("volleylesson",response.toString());
	}
        },
        new Response.ErrorListener() {//请求失败的监听
	@Override
	public void onErrorResponse(VolleyError error) {//返回请求失败的错误信息
          
            }
        }
	){
        //封装请求参数
        @Override
	protected Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> mapParam =  new HashMap<String,String>();
	// 设置参数
        // pagesize 每页多少行
	mapParam.put("pagesize", "20");
	// pageindex 页码
	mapParam.put("pageindex", "2");
        return mapParam;
	}
	};
	mRequestQueue.add(jsonRequest);//加入请求队列
3.ImageRequest(图片请求)
        
       public void showImgByImageReq(){
/**
 * Creates a new image request, decoding to a maximum specified width and
 * height. If both width and height are zero, the image will be decoded to
 * its natural size. If one of the two is nonzero, that dimension will be
 * clamped and the other one will be set to preserve the image's aspect
 * ratio. If both width and height are nonzero, the image will be decoded to
 * be fit in the rectangle of dimensions width x height while keeping its
 * aspect ratio.
 *
 * @param url URL of the image
 * @param listener Listener to receive the decoded bitmap
 * @param maxWidth Maximum width to decode this bitmap to, or zero for none
 * @param maxHeight Maximum height to decode this bitmap to, or zero for
 *            none
 * @param scaleType The ImageViews ScaleType used to calculate the needed image size.
 * @param decodeConfig Format to decode the bitmap to
 * @param errorListener Error listener, or null to ignore errors
 */
               ImageRequest imageRequest = new ImageRequest(
		"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/logo_white_fe6da1ec.png",//图片请求地址
            	new Response.Listener<Bitmap>() {//请求成功后的监听
		@Override
		public void onResponse(Bitmap response) {//返回Bitmap类型的图片资源
		ivImageReq.setImageBitmap(response);
		}
            	},
	        500, //设置图片最大的宽度
		500, //设置图片的最大的高度
		ImageView.ScaleType.CENTER,//设置图片的存放的类型,是居中,拉伸,等比例缩放... 
		Bitmap.Config.ARGB_8888,//设置一个像素点占多少个字节,当且8888代表每个像素点有4个字节
            	new Response.ErrorListener() {//请求失败的监听
		@Override
		public void onErrorResponse(VolleyError error) {
                      Log.i("rag"," 错误信息"+error.getMessage());
                }
                });
		mRequestQueue.add(imageRequest);//加入请求队列
	}
4.ImageLoad
    相比ImageRequest,可以设置内存缓存,可以设置加载和失败时默认显示的图片
       /**
         * 查找顺序:先查找内存,再查找本地文件,最后从网络下载
         * 存储顺序:从网络下载->存在内存,同时存放到本地文件
         * 如果没有写到缓存,只存在本地文件
         */
        private void showImgByImageLoad() {
    
        //获取APP能使用的最大内存
        //last recently use:最近最少使用的算法
	int iMaxMem = (int) Runtime.getRuntime().maxMemory();

   	final LruCache<String,Bitmap> lruCache = new LruCache<String,Bitmap>(iMaxMem/8){
	@Override
	protected int sizeOf(String key, Bitmap value) {
	       return value.getByteCount();//返回图片的大小 默认返回1
	}
    	};
        ImageLoader imageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
	@Override
	public Bitmap getBitmap(String url) {//从内存中获取照片
	return lruCache.get(url);
	}

	@Override
	public void putBitmap(String url, Bitmap bitmap) {
	lruCache.put(url,bitmap);//将图片写入内存
	}
    	});
    /**@param view The imageView that the listener is associated with.
     * @param defaultImageResId Default image resource ID to use, or 0 if it doesn't exist.
     * @param errorImageResId Error image resource ID to use, or 0 if it doesn't exist.
     */
	ImageLoader.ImageListener listener = ImageLoader.getImageListener(ivImageReq,
	R.mipmap.ic_launcher,//设置默认图片
	R.mipmap.ic_launcher);
       //自己给imageview控件设置值
         /*ImageLoader.ImageListener listener = new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                iv.setImageBitmap(response.getBitmap());
            }

            @Override
            public void onErrorResponse(VolleyError error) {
                iv.setImageResource(R.mipmap.ic_launcher);
            }
        };*/
	imageLoader.get("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/logo_white_fe6da1ec.png",
	listener
            );
	}
5.NetworkImage解决了图片错位的问题,

      private void showNetImg() {

    		ImageLoader imageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
		@Override
		public Bitmap getBitmap(String url) {
			return null;//获取内存的资源
		}

		@Override
		public void putBitmap(String url, Bitmap bitmap) {
                        //将加载的图片存储在内存中
       		 }
   		});
		mNetworkImageView.setDefaultImageResId(R.mipmap.ic_launcher);//设置默认图片
		mNetworkImageView.setErrorImageResId(R.mipmap.ic_launcher);//设置加载失败后显示的照片
		mNetworkImageView.setImageUrl("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/logo_white_fe6da1ec.png",
		imageLoader);
	}








RK3588 InsightFace人脸识别移植及精度测试全解析 本文详细介绍了如何在RK3588平台上移植InsightFace人脸识别模型并进行精度验证。通过PyTorch转ONNX、ONNX转RKNN量化模型的关键步骤,实现了INT8量化模型的部署。测试数据显示,该模型在LFW数据集上达到99.43%的准确率(接近官方99.52%),推理时间仅14.23ms。ROC曲线和相似度分布图表明模型区分能力优秀,AUC超过0.99,满足实际应用需求。文中还详解了量化原理、环境搭建和测试方法,为边缘设备部署人脸识别提供了完整解决方案。 阅读详情

相关推荐

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码)

本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。

u5v6w7的博客 935

Android Volley 基本使用

Volley是Google 提供的一个小巧的异步请求库,扩展很强支持okhttp,(默认是 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现), Volley 英文齐射的意思 就是指无数急促的请求,适合数据量小,并且通信频繁的场景本篇主要介绍 andriod 中 Volley的基本使用方式,它是官方开发的一个HTTP框架 简化操作 , Volley 的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作。

m0_56146626的博客 752

图像去畸变(相机成像、畸变模型)

首先通过上一步相机标定得到畸变参数和相机内参,同时,由于图像去畸变都是在归一化相机坐标系下进行的,而图像都是像素坐标,所以需要先通过相机内参矩阵将图片上的像素点从像素坐标系转变到归一化坐标系,再通过畸变参数在归一化坐标上进行去畸变的操作。由于畸变是发生在世界点通过透镜投影到相机坐标系这个过程中的,所以去畸变操作是在相机坐标系下进行的。(如图,Pd即为畸变后成像点)3.读取图像和各个参数,调用去畸变函数(opencv自带的cv.undistort函数),就可以完成对图像的去畸变处理,进而得到去畸变的图像。

lm5688jjupm1n28的博客 1051

安卓开发之含参数的接口调用(volley)

不带参数的接口,如: https://www.baidu.com/ 带参数的接口,如:https://www.youtube.com/watch?v=NvDHivDlUb4&amp;app=desktop 油管的这个链接中参数有 v 和 app ,第一个参数需要用“?”标识,之后的参数都用“&amp;”隔开 volley读取接口数据分为get方法和post方法两种,post方法比较安全,不会暴露参...

Emma_Hui的博客 525

Nvidia AGX Xavier刷机指北

因为工作的关系,要在AGX上安装CUDA。nvidia官网上没找到适合AGX版本的CUDA,只能走刷机的路子。刷机过程中,也遇到一些坑,做个记录。 需要有一台ubuntu系统的电脑作为主机Host。我的主机系统为Ubuntu18.04 整个刷机过程为: 在Host上安装sdkmanager,整个刷机过程主要通过sdkmanager来操作。 在Host自动下载一些系统组件,各种deb包 Host上制作OS系统镜像,烧录到AGX中 Host上之前下载好的deb包,安装到AGX中。 完结,撒花 ...

sinat_38685124的博客 6294

笔试题-2023-大疆-数字IC设计【纯净题目版】

笔试题-2023-大疆-数字IC设计【纯净题目版】

w0shishabi的博客 2513

Android Volley使用(二)使用Volley加载网络图片

使用Volley加载网络图片

Errol's Blog 2748

基于Simulink的电动车PMSM能量泄放与回收系统仿真设计

摘要 本文设计了一个基于Simulink的电动车PMSM能量泄放与回收系统仿真模型。系统采用分层建模方案,包含永磁同步电机(PMSM)矢量控制、电池管理和泄放功率计算等核心模块。通过详细的参数计算和MATLAB脚本实现,模拟了电动车在制动时的能量回收过程。重点研究了泄放电阻的控制策略,提出基于母线电压和电池SOC的多目标优化算法,确保系统在保护硬件安全的同时最大化能量回收效率。仿真模型包含完整的数学推导和模块搭建指南,为电动车能量管理系统设计提供了有效的仿真验证平台。

huanghm88的专栏 193

android开发之Volley

最近在做项目的时候,各种get和post。简直要疯了,我这种啥都不了解的,不知道咋办了,然后百度看了下,可以用volley进行网络请求与获取,下面就介绍下volley的用法。 volley有三种方式:JsonObjectRequest,JsonArrayRequest,StringRequest。其实都是差不多了,举一反三就ok了,这里我就讲下JsonObjectRequest。 方法如下:

一个学渣走向android之路 871

【2026华为OD新规机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 507

【实战篇】【硅基流动API+Cherry Studio搭建个人知识库全流程解析:从零到精通的超详细指南】

在人工智能技术高速发展的今天,基于大语言模型的知识库已成为开发者提效的必备工具。然而云端服务存在响应延迟、数据隐私、硬件依赖等痛点。通过硅基流动API与的深度整合,我们既能享受大模型的强大能力,又能实现本地化部署与高效管理。本文将从环境配置到高阶调优,手把手带你构建企业级知识库系统。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1082

博客导航——一站式搜索

原文:点击打开链接 Java Code 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949...

yearHeaven的博客 715

基于方差分解分析气象/水文干旱驱动因素(含MATLAB全代码)

简介基于方差分解方法分析气象/水文干旱驱动因素

WW、forever的博客 801

博客导航——一站式搜索(所有博客的汇总帖)

博客导航——一站式搜索 以后博客肯定会越来越多的,所以这做一个整理,方便各位朋友能快速的锁定自己想要的资源 Android Studio Google主推-Android开发利器——Android Studio,这可能是最全的AS教程! Android Studio 2.0 Preview 4 的...

weixin_33881050的博客 207

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 高级工程师要求,Android高级工程师所要达到的技术要求

1 . Android的基本知识四大组件、Fragment、自定义控件、动画、组件之间的消息传递等等,这些都是基本知识也是开发过程中所必须掌握的,同时也是为今后的发展所打的基础,在这个基础上我们还要掌握组建的生命周期呀,activity启动模式的区别和场景应用、scheme跳转协议、 组件之间消息传递的机制、动画的种类和区别、属性动画的特点和作用等2 . Android的技术难点AIDL、Bind...

weixin_29164185的博客 647

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

从事Android开发这么多年了,你知道初、中、高级、资深及专家怎么划分嘛?

不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。在我学习的过程中,最开始是在网上找了很多资料,毕竟这些资料是我们开始最快速的学习方法,这里我放上我这些年在网上收集到的资料,然后再以我的工作经验给大家总结一下,让你们少走些弯路,提取一些目前互联网公司最主流的Android开发架构技术,希望能帮助到大家!

2301_76327109的博客 1220

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android开发工程师如何区分其能力等级(初级,中级,高级)?(2)

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。【Android思维脑图(技能树)】知识不体系?

2401_84279169的博客 319

Android Volley网络通信库学习

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术高级UI,自定义ViewUI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!料。希望能够帮助到大家提升技术。

2401_84009529的博客 894

八年Android开发,从码农到架构师分享我的技术成长之路,共勉!

要想有机会,首先你得从人群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多!成为技术大牛梦想虽然很美好,但是要付出很多,不管是Do more还是Do better还是Do exercise,都需要花费时间和精力,这个过程中可能很苦逼,也可能很枯燥,这里我想特别强调一下:前面我讲的都是一些方法论的东西,但真正起决定作用的,其实还是我们对技术的热情和兴趣!如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。

2401_84538391的博客 611

Android Volley网络通信库学习,轻松拿到了阿里Android高级开发工程师的offer

@Override public void onResponse(JSONObject response) { Log.d(TAG, "response : " + response.toString()); } }, null)); mQueue.start(); Post 其他步骤与Get请求一致,在第二步创建Request的时候,我们只要将传入的第一个参数改为 Method.POST; 如果有Post数据,我们需要重写getParams方法(观察过Volley源码的同学可以看到,源码中getPara

m0_63935228的博客 150

Android Volley完全解析(二),使用Volley加载网络图片

Android Volley完全解析(二),使用Volley加载网络图片 目录(?)[+] 转载请注明出处:http://blog.youkuaiyun.com/guolin_blog/article/details/17482165 在上一篇文章中,我们了解了Volley到底是什么,...

chzhp1264的博客 91

Android Volley完全解析 二 ,使用Volley加载网络图片

Android Volley完全解析 二 ,使用Volley加载网络图片

hfdhjjj的博客 174

Android网络通信:Volley(二)

1、ImageRequest的用法 前面我们已经学习过了StringRequest和JsonRequest的用法,并且总结出了它们的用法都是非常类似的,基本就是进行以下三步操作即可: 1. 创建一个RequestQueue对象。 2. 创建一个Request对象。 3. 将Request对象添加到RequestQueue里面。 其中,StringRequest和JsonRequest都是

245

使用Volley传输网络数据(官网教程)

介绍: Volley是一个HTTP库,使Android应用程序变得更加容易,最重要的是,网络速度更快。并且是开源的。 Volley有以下特点: *自动网络请求调度 *多个并发的网络连接 *透明的磁盘和内存响应缓存与标准HTTP缓存一致性。 *支持请求优先级。 *取消请求API。你可以取消一个请求,或者你可以设定取消请求的块或范围。 *易于定制,例如,重试和补偿。 *订制你

Hanks软件库 2709
上一篇: android高级技术之相机的前后摄像头切换
下一篇: android高级之图片二次采样
program008
博客等级 码龄11年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值