Android网络编程之Volley开发笔记

2024-05-15 07:18

本文主要是介绍Android网络编程之Volley开发笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android网络编程之Volley开发笔记

Android网络编程几乎是每个APP必不可少的功能,Android系统对应网络编程提供了两种http通信方式,HttpURLConnection和HttpClient,这两个的使用率非常高,但是,这两种方式的开发相对比较复杂。于是,谷歌开发团队也意识到了有必要对Http通信操作做一些简化,在2013年的Google I/O大会上发布了一个新的网络通信框架--Volley。


一、Volley简介

  Volley的优点是处理一下数据量较小,对网络请求又频繁操作的行为,提供高效、方便、快捷的方法。

而对于大数据量,比如下载文件、电影等,则不是Volley的优势。

   网络开发Volley.jar包下载

 

二、Volley提供的高效功能如下:

       Json,图片等的异步下载;

        对网络请求进行排序

        网络请求的优先级处理

        缓存

        多级别取消请求

        和Activity和生命周期的联动(activity结束的同时取消所有网络请求)

三、Volley的使用

       使用Volley,首先要实现一个请求队列,RequestQueue,他可以缓存所有的Http请求,并按照一定的算法并发的发出这些请求,RequestQueue的内部设计是非常适合高效和并发的,所以不用每次请求都创建一个请求队列,在每一个用到http请求的activity中创建一个RequestQueue就够了。

       1.初始化一个请求队列:

        //一个activity创建一个RequestQueuepublic void initRequestQueue(){RequestQueue mQueue = Volley.newRequestQueue(this);}
       2.使用volley的异步请求类(StringRequest,JsonRequest,ImageRequest,自定义XMLRequest)

          这几个异步请求类大同小异,代码基本差不多。

         最重要的一点,记得添加网络权限

     <uses-permission android:name="android.permission.INTERNET"/>

          

          字符串请求类StringRequest,有四个参数(请求方式get/post,URL,请求响应成功的监听,请求响应失败的监听)

          下面是个Get请求,不需要传递参数,使用比较简单。

// 发送一个字符串请求public void sendStringRequestClick(View view) {String url = "http://www.baidu.com";
                //创建一个字符串请求类StringRequest request = new StringRequest(Method.GET, url,new Listener<String>() {@Overridepublic void onResponse(String arg0) {// TODO Auto-generated method stubSystem.out.println(arg0);}}, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {// TODO Auto-generated method stubSystem.out.println(arg0);}});mQueue.add(request);}
           下面是StringRequest的Post请求,与get方式基本相同,只是需要使用getParams,以Map的形式传递参数。

public void sendPostRequestClick(View view) {String url = "202.199.155.2";StringRequest post = new StringRequest(Method.POST, url,new Listener<String>() {@Overridepublic void onResponse(String arg0) {// TODO Auto-generated method stubSystem.out.println(arg0);}}, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {// TODO Auto-generated method stubSystem.out.println(arg0);}}) {@Overrideprotected Map<String, String> getParams() throws AuthFailureError {// TODO Auto-generated method stubMap<String, String> map = new HashMap<String, String>();map.put("TextBox", "122");map.put("txtUserName", "123");return map;}};mQueue.add(post);}
           JsonRequest与StringRequest基本一致

           下面是ImageRequest,重点是6个参数的含义

            第一个是URL,没啥说的

            第二个是请求返回成功时的回调,成功时将Bitmap放入到ImageView中

            第三、第四是分别制定图片的最大宽度和高度,如果网络图片的宽高大于参数制定的,则会进行压缩,如果参数为0,则不会进行压缩

           第五制定图片的颜色属性, Bitmap.Config的几个常量都可以使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节,而RGB_565表示每个图片像素占据2个字节大小。

           第六是图片请求失败的回调,失败时在Imageview中显示一个默认的图片。

public void sendImageResponse(View view) {String url = "http://images.china.cn/attachement/jpg/site1000/20150307/c03fd55668721664d7541f.jpg";ImageRequest imageRequest = new ImageRequest(url,new Listener<Bitmap>() {@Overridepublic void onResponse(Bitmap arg0) {// TODO Auto-generated method stubimageView.setImageBitmap(arg0);}}, 0, 0, Config.RGB_565, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {// TODO Auto-generated method stub}});mQueue.add(imageRequest);}

             对于ImageRequest的使用,Volley还提供了一直更加高效的使用ImageLoader,ImageLoader内部也是ImageRequest实现的,不过ImageLoader不仅可以对图片进行缓存,还可以过滤掉重复的链接,避免重复请求。

           

public void imageLoderClick(View view) {String url = "http://images.china.cn/attachement/jpg/site1000/20150307/c03fd55668721664d7541f.jpg";//创建一个ImageLoader类ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCatch());<span style="color:#ff0000;">//创建一个ImageListener监听,第一个参数是Imageview,第二个参数是默认图片,第三个是失败的图片</span>ImageListener imageListener = ImageLoader.getImageListener(imageView,R.drawable.default_image, R.drawable.error_image);imageLoader.get(url, imageListener, 200, 200);}//创建一个缓冲内部类private class BitmapCatch implements ImageCache {private LruCache<String, Bitmap> mLruCache;public BitmapCatch() {int size = 1024 * 1024;//缓冲大小mLruCache = new LruCache<String, Bitmap>(size) {protected int sizeOf(String key, Bitmap value) {return value.getRowBytes() * value.getHeight();}};}@Overridepublic Bitmap getBitmap(String arg0) {// TODO Auto-generated method stubreturn mLruCache.get(arg0);//从缓冲中获取图片}@Overridepublic void putBitmap(String arg0, Bitmap arg1) {// TODO Auto-generated method stubmLruCache.put(arg0, arg1);//放入缓冲区}}
               对于加载图片,Volley还有第三种加载方式,NetworkImageView,它是一个自定义控件,具备ImageView的所有功能,只是加入了网络加载图片功能。

       <com.anroid.volley.toolbox.NetworkImageViewandroid:id="@+id/imageView"android:layout_width="90dp"android:layout_height="90dp"android:layout_marginLeft="18dp"android:scaleType="center" />
    

           






这篇关于Android网络编程之Volley开发笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991159

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依