使用Volley发起网络请求

前言

本文是对Google官方文档中关于Volley部分的学习和总结,原文地址详情参考,通过对文档的翻译和学习,总结出自己的理解,通过一个Demo来展现

Volley概述

Volley是一个Google推出的一个HTTP网络请求开源库,它可以简化Android应用程序的联网操作,以更快的速度进行网络请求,很多大公司的App都集成了Volley库。

Volley开源库具有的优点包括:

  • 自动进行网络请求的相关操作
  • 支持多个并发的网络连接
  • 具有标准HTTP缓存一致性的透明磁盘和内存响应缓存
  • 支持请求优先级
  • 提供取消网络请求API,可以单个取消,也可以设置请求阻塞或者请求取消范围
  • 简单的自定义操作,例如重试操作和回溯操作
  • 有序请求使得从异步网络中能够正确的填充UI
  • 调试和跟踪工具

Volley在用于填充UI的RPC类型操作方面表现出色,例如将搜索结果页面作为结构化数据来获取。它可以轻松地与任何协议集成,并且开箱即用,支持原始字符串图像JSON。通过提供对所需功能的内置支持,Volley无需编写样板代码,可以专注于特定于应用程序的逻辑。

Volley不适合大型下载或流式传输操作,因为Volley在解析期间会将所有响应都保存在内存中。对于大型下载操作,请考虑使用替代方法DownloadManager

配置Volley库

dependencies {
    implementation 'com.android.volley:volley:1.1.1'
}

除此之外,还需要在AndroidManifest.xml文件中添加网络请求权限

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

不加权限的话,可以正常运行,APP执行网络请求也不会崩溃,但是会一直请求失败。

网络请求字符串

Volley提供了高度封装的接口来请求网络,比如StringRequest来请求字符串:

	private void requestNetworkByVolley() {
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "https://www.baidu.com";

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url
                , v -> {
            display.setText("Response is:" + v.substring(0, 500));
        }
                , x -> {
            display.setText("That didn't work!");
        });
        queue.add(stringRequest);
    }

我们使用StringRequesetwww.baidu.com发起网络请求,得到的是一个html的页面,但是这里作为字符串进行显示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xOD6EEIV-1570614874082)(./pic/Screenshot_1570540877.png)]
需要特备注意的是,在Android P以上的环境下,如果请求的是http链接,而非https,那么需要做特别处理,详情参考

Request实现过程

如何发送网络请求,只需要构造一个Request对象,并使用RequestQueueadd方法加入该对象,一旦添加该请求,它将移动至管道,获取服务、解析和交付原始响应。

当调用add之后,Volley运行一个缓存处理线程和一个网络调度线程池。在请求添加到队列的时候,首先由缓存处理线程获取并进行分类,如果可以从缓存服务请求,则缓存的响应将在缓存线程上解析,解析后的响应将在主线程上传递。如果无法从缓存处理请求,则将其放在网络队列中。第一个可用的网络线程从队列获取请求,执行HTTP事务,解析工作线程上的响应,将响应写入缓存,并将解析后的响应发送回主线程进行传递。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-95G2QuJN-1570614874084)(./pic/)]
(图片来自Google官方文档)

注意,像阻塞I/O和解析/解码这样的昂贵操作是在工作线程上完成的。您可以从任何线程添加请求,但是响应总是在主线程上传递。

参考链接

Google Volley官方API文档:https://developer.android.com/training/volley

发布了222 篇原创文章 · 获赞 558 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/CV_Jason/article/details/102466976
今日推荐