Android应用中网络请求库Volley的使用

上文,这次来说一下如何使用Volley,会给出一些范例,和原理

Volley使用 StringRequest

// 初始化一个请求队列,RequestQueue是volley库的类
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.baidu.com";
//定义一个字符串型请求队列,需要传递4个参数分别是:url, 请求的方式(get, post..),响应成功的处理函数匿名对象, 相应出错时候的处理函数匿名对象
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!");
    }
});
//添加到请求队列中,默认就开始了网络请求
queue.add(stringRequest);

按照Volley的设计规则,程序要只要创建一个RequestQueue,并传递一个Request对象行了。RequestQueue维护这一些正在访问网络的线程的运行,读写缓存,获取网络请求的返回等事务。Request对象会再收到数据后进行解析,而RequestQueue还会负责将解析过的数据返回给主线程(UI线程),以便于你将数据在UI控件中展示等。

要使用Volley,必须在应用的Menifest文件中声明android.permission.INTERNET的权限。

Volley发送网络的过程解析

要想在代码中获取一个RequestQueue,默认可以使用Volley.newRequestQueue方法来完成,如上述代码所示。当然你也可以自己定义一个你自己的RequestQueue。从上面的代码看出,当Request对象创建好后,你只要调用RequestQueue的add()方法(参数就是Request对象)就能将这个网络请求发出。当add方法调用后,Volley会自动创建一个缓存处理线程和一个网络请求线程池,Volley会先判断你发送网络请求是否曾经存在于缓存中,若已经存在,那么缓存处理线程会对发出请求进行处理并返回结果(中间没有任何网络交互)。如果你发送的网络请求在缓存没有找到,那么这个请求会被放在网络请求队列中,网络请求线程池中会逐个从网络请求队列中获取请求内容,通过HTTP发生网络请求事务,返回的结果由Volley返回给主线程。

Volley取消网络请求操作

Volley库可以在代码中使用RequestQueue中的cancelAll()方法完成。比如,每个Request子类都有个setTag(Object obj)的方法,可以将每个tag设置为一类请求。比如你在一个Activity中的所有Request都用this(Activity的this就是该activity实例)作为setTag的参数,你可以随时随地调用RequestQueue的cancelAll(Object obj)方法,传递this作为obj的实参,这样这个activity的所有网络请求都被取消了。当然也可以传递任意的字符串类型的参数(最好有意义的字符串),代码实例:

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

// 给Request设置tag进行分来
stringRequest.setTag(TAG);

mRequestQueue.add(stringRequest);

取消网络请求比较好的途径是放在activity的onStop方法中(也可以是任何地方,这里是惯例),如下

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

另外需要注意的是,Request的响应处理函数(Response.Listener和Response.ErrorListener,见上)此时不会被调用。

如何在Request中设置Htpp请求的Header, Body?

要想设置request中的http请求中的header, boday内容可以重载getHeader方法

StringRequest request = new StringRequest(Request.Method.POST, "www.yoururl.com", new Response.Listener<String>() {
    @Override
    public void onResponse(String s) {

    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError volleyError) {

    }
}){
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> map = new HashMap<>();
        Map<String, String>  params = new HashMap<String, String>();
        params.put("User-Agent", "Nintendo Gameboy");
        params.put("Accept-Language", "fr");
        params.put("Authorization", "Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b");

        return params;
    }
};

对你有用的话,就点个赞吧, :)

时间: 2024-10-12 07:22:10

Android应用中网络请求库Volley的使用的相关文章

Android应用中网络请求库Volley的介绍

Volley 是一个HTTP的库,使用它能让Android应用网络传输的操作更加轻松,快捷.Volley的代码是托管在Android 源代码树下的一个工程,编译出来后是一个volley.jar文件.以下是Volley的特点 自动调度在代码中提交的网络请求(http) 多个网络请求的并发执行 对用户透明的磁盘或内存的缓存机制(本质是Http缓存机制) 能够支持网络请求的优先级 能在代码中,必要时轻松的取消网络请求(如activity销毁时),可以取消指定tag的网络请求,或按某种机制分类的网络请求

Android 各大网络请求库的比较及实战,android请求库实战

自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient.

Android 各大网络请求库的比较及实战

自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient.

android网络请求库volley方法详解

使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this); 2.创建请求对象(3种) StringRequest request = new StringRequest(“请求方法”,“请求的网络地址”,“成功的网络回调”,“失败的网络回调”): Ima

网络请求库Volley

介绍 Volley下载地址 创建RequestQueue 使用RequestQueue StringRequest JsonRequest ImageRequest Post请求 取消请求 请求的优先级 优先级列表 1.介绍 通常Volley只会用到两个类RequestQueue 和Request,首先创建一个RequestQueue,RequestQueue管理工作线程并将解析的结果发送给主线程.然后传递一个或者多个Request 对象给他. Request 的构造函数的参数包含请求类型(GE

Android 网络请求库volley的封装,让请求更方便

首先封装一下volley 请求 public class CustomRequest extends StringRequest { private static final String TAG = CustomRequest.class.getSimpleName(); private String mBody; private Map<String, String> mHeaders = new HashMap<>(); public CustomRequest(int me

网络请求框架---Volley

去年的Google I/O大会为android开发者带来了一个网络请求框架,它的名字叫做Volley.Volley诞生的使命就是让Android的网络请求更快,更健壮,而且它的网络通信的实现是基于HttpURLConnection的.前几天我整理了两个网络请求工具类,应付日常工作的开发需求还是没问题的,自己分别在HttpURLConnection和HttpClient的基础上进行进一层的封装,保证了API的足够简洁友好.有兴趣的同学可以回头去翻翻,源码在Github上,搜索AndroidHttp

Android进阶笔记01:Android 网络请求库的比较及实战(一)

在实际开发中,有的时候需要频繁的网络请求,而网络请求的方式很多,最常见的也就那么几个.本篇文章对常见的网络请求库进行一个总结. 一.使用HttpUrlConnection: 1. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android2.3以后使用HttpUrlConnection,之前使用HttpCl

浅论Android网络请求库——android-async-http

浅论Android网络请求库——android-async-http Android应用中使用AsyncHttpClient来异步网络数据