Android Volley 发送一个简单的请求

Stella981
• 阅读 632

可以通过创建一个RequestQueue并传递Request对象来使用Volley。RequestQueue管理工作线程,这些线程用于运行网络操作、读取和写入缓存和解析响应。Request对原始响应进行解析,并且Volley负责将已解析的响应分派回主线程。

本文介绍如何使用Volley.newRequestQueue的便捷方法发送请求,该方法为您这是了一个RequestQueue。本文还介绍了如何向RequestQueue添加请求和取消请求。

添加INTERNET权限

使用Volley,需要将android.permission.INTERNET权限添加到app的清单文件中。否则app将不能连接网络。

使用 newRequestQueue

Volley提供了一个便捷的方法Volley.newRequestQueue,它使用默认值创建一个RequestQueue,并启动队列。例如:

final TextView mTextView = (TextView) findViewById(R.id.text);
...

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        // Display the first 500 characters of the response string.
        mTextView.setText("Response is: "+ response.substring(0,500));
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        mTextView.setText("That didn't work!");
    }
});
// Add the request to the RequestQueue.
queue.add(stringRequest);

Volley总是在主线程上提解析响应。在主线程上运行可以方便的使用接收到的数据填充UI控件,因此可以直接从响应的处理程序中自由的修改UI控件。同时这对于本库提供的许多主要特性也很重要,特别是与取消请求有关。

发送请求

要发送一个请求,只需要构建一个请求,并使用RequestQueue的add()方法将其添加到RequestQueue中,如上所示。一旦添加了一个请求,它通过管道移动、得到服务,并拥有自己的已投递和解析的响应。

当调用add()时,Vollley运行一个缓存处理线程和一个网络调度线程池。当向队列添加请求时,它由缓存线程拾取并分类:如果请求可以被缓存处理,那么缓存响应就在缓存线程中被解析并且解析后的响应被传递到主线程。如果请求不能被缓存处理,他被放置在网络队列中。第一个有效的网络线程从队列中获取请求,执行HTTP事务,并在工作线程中解析响应,将响应写入缓存,然后将解析过的响应送回主线程被传递。

请注意,耗时操作(如阻塞I/O和解析/解码)是在工作线程上完成的。可以在任何线程中添加请求,但是响应始终在主线程上传递。 Android Volley 发送一个简单的请求

要取消一个请求,需要在Request对象上调用cancel()。一旦被取消,Volley保证响应处理程序永远不会被调用。这在实践中意味着可以在activity的onStop()方法中取消所有待处理的请求并且不必在响应处理程序中检查getActivity()==null。

要利用此行为,您通常必须跟踪所有正在运行的请求,以便能够在适当的时间取消它们。有一个更简单的方法:可以将标记对象与每个请求相关联。然后,可以使用此标签来提供要取消的请求范围。例如,可以标记Activity中的所有请求,并在onStop()中调用requestQueue.cancelAll(this)。同样,可以使用相应的标签标记ViewPager一个标签中的所有缩略图请求,并在滑动时取消这些request以确保新标签不被另一个标签的请求阻塞。

下面是使用字符串标签的例子:

  1. 定义tag并将其添加给请求。

    public static final String TAG = "MyTag"; StringRequest stringRequest; // Assume this exists. RequestQueue mRequestQueue; // Assume this exists.

    // Set the tag on the request. stringRequest.setTag(TAG);

    // Add the request to the RequestQueue. mRequestQueue.add(stringRequest);

  2. 在Activity的onStop()方法中,取消有此标签的所有请求。

    @Override protected void onStop () { super.onStop(); if (mRequestQueue != null) { mRequestQueue.cancelAll(TAG); } }

取消请求时请小心。如果您依赖于您的响应处理程序来推进状态或启动另一个进程,则需要考虑这一点。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这