Android框架之volley的使用

Volley是一款由Google发布的Android平台网络通信库,适用于数据量不大但通信频繁的应用场景。它支持自动调度网络请求、高并发连接及透明缓存等功能,并提供了调试与追踪工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Volley

Volley的中文翻译为“齐射、并发”,是在2013年的Google大会上发布的一款Android平台网络通信库,具有网络请求的处理、
 小图片的异步加载和缓存等功能,能够帮助 Android APP 更方便地执行网络操作,而且更快速高效。
 Volley特别适合数据量不大但是通信频繁的场景                

Volley 有如下的优点:
    自动调度网络请求;
    高并发网络连接;
    通过标准的 HTTP cache coherence(高速缓存一致性)缓存磁盘和内存透明的响应;
    支持指定请求的优先级;
    网络请求cancel机制。我们可以取消单个请求,或者指定取消请求队列中的一个区域;
    框架容易被定制,例如,定制重试或者回退功能;
    包含了调试与追踪工具;
    Volley 不适合用来下载大的数据文件。因为 Volley 会保持在解析的过程中所有的响应。对于下载大量的数据操作,请考虑使用 DownloadManager    


实现思路:


                            将请求添加到请求对列(mian Thread) 

                                        |
                                        |
                     添加到缓存详情,进行缓存内容查找 (缓存线程)

                          |                         |
                         是(有内容)               否(没有内容)
                          |                         |
                          |                         |
                读取缓存的内容(缓存线程)           |
                          |                    开启网络请求(网络请求线程)
                          |                         |
                数据返回给主线的回调方法(主线程)   |
                          |                         |
                          |                 将数据添加到缓存中(网络线程) 
                          |                         |
                          --------------------------|                           

RequestQueue 请求对列

    1. 获取系统默认的请求对列 

       Volley.newRequestQueue(this)
       默认缓存路径:File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);  data/data/包名/cache/volley

       当当前Api >= 9  网络加载使用 HttpUrlConnection
                 <9    AndroidHttpClient

    2.自定义请求队列 修改缓存的路径


      /**
     * 参数1:File 缓存所在的文件夹  指定缓存路径
     * 参数2: 指定缓存容量的大小
     */

    File  file = new File(Environment.getExternalStorageDirectory(),"volleyxx");
    if (!file.exists()){
        file.mkdirs(); //创建缓存的文件夹  sdcard/volleyxx
    }

    Cache cache = new DiskBasedCache(file,100*1024*1024);

    /**
     * HurlStack       HttpUrlConnection
     * HttpClientStack  HttpClient
     */
    Network network = new BasicNetwork(new HurlStack());
    /**
     * 1.缓存部分
     * 2.网络部分
     */
    requestQueue = new RequestQueue(cache,network);

    //最后一定要调用start
    requestQueue.start();



Request 请求 

    Request 
          1.使用Volley自带的请求
           StringRequest 返回的结果是 String  重点
           JsonArrayRequest 返回的结果 JSONArray  
           JSONObjectRequest 返回的就是 JSONObject   返回的结果必须是JSONArray或者JSONObject

          2.自定义请求返回对应的实体类类型

            希望返回的数据 直接是GSON插件解析的实体类对象!

RequestQueue.add(Request) 开启一个请求 
### 解决 IntelliJ IDEA 中 'Address already in use: bind' 错误的方法 当遇到 `Address already in use: bind` 错误时,通常是因为某些端口已经被其他进程占用。以下是几种可能的解决方案: #### 方法一:查找并终止占用端口的进程 可以使用命令行工具来查找正在监听特定端口的服务,并结束该服务。 对于 Windows 用户: ```powershell netstat -ano | findstr :<port_number> taskkill /PID <process_id> /F ``` 对于 Linux 或 macOS 用户: ```bash lsof -i :<port_number> kill -9 <process_id> ``` 其中 `<port_number>` 是被占用的端口号,而 `<process_id>` 则是从前一条指令返回的结果中获取到的具体 PID 值[^2]。 #### 方法二:更改配置文件中的默认端口设置 如果不想关闭现有应用程序,则可以在 IDE 配置或其他相关项目的设置里修改默认使用的 TCP/IP 地址或端口号。例如,在 Tomcat 服务器的情况下,可以通过编辑 `server.xml` 文件调整 HTTP 连接器部分定义的不同接口参数值;而对于 Spring Boot 应用来说,只需简单地改变 application.properties 或 yml 文件内的 server.port 属性即可[^1]。 #### 方法三:重置网络适配器和服务 有时候操作系统本身可能会出现问题导致端口无法正常释放。此时可尝试重启计算机上的 NAT (Network Address Translation) 功能以解决问题。具体操作如下所示: ```cmd net stop winnat net start winnat ``` 这组命令能够有效地刷新系统的路由表单以及重新初始化所有的连接状态信息,从而使得之前未成功解除绑定的状态得到恢复[^4]。 通过上述三种方式之一应该能有效处理因地址冲突引发的应用程序启动失败现象。当然也建议定期查看是否有不必要的后台运行着长期保持开放连接状态的任务以免造成资源浪费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值