Volley的特点:
 
  • 使用网络通信更快。更简单
  • Get/Post网络请求网络图像的高效率异步请求
  • 可以对网络请求的优先级进行排序处理
  • 可以进行网络请求的缓存
  • 可以取消多级别请求
  • 可以和Activity生命周期联动
 
Volley的使用:
 
1.Volley网络请求队列建立与取消队列请求
 
使用Volley需要建立一个全局的请求队列,这样就可以讲一个请求加入到这个全局队列中,并管理整个app的所有请求。
 
2.Volley的Get和Post请求方式的使用
 
Volley的Get和Post请求方式其实是对Android原生Get和Post请求方式进行了二次封装,对效率等进行优化。在使用Get和Post请求方式之前,我们要确定所请求的数据返回什么对象,Volley自带了三种返回类型:
 
StringRequest :主要使用在对请求数据的返回类型不确定的情况下,StringRequest涵盖了JsonObjectRequest和JsonArrayRequest。
 
JsonObjectRequest :当确定请求数据的返回类型为JsonObject时使用。
 
JsonArrayRequest :当确定请求数据的返回类型为JsonArray时使用。
 
3.Volley与Activity生命周期的联动
 
简单来说就是Volley中的请求是与Activity的生命周期进行关联。这样可以在Android销毁时关闭Volley的请求,防止请求在后台运行造成内存溢出等情况发生。与Activity生命周期进行联动时需要设置Tag标签,因为取消请求需要在请求队列中通过Tag标签进行查找,在Activity的onStop中执行取消请求的操作。
 
Volley网络请求的演示:
 
使用Volley时,需要导入Volley的jar包。在Android Studio中可以在Builder.gradle中加入
compile 'com.mcxiaoke.volley:library:1.0.19'
 
首先,创建一个Application用于创建一个全局的请求队列:代码如下所示:
 
public class MyApplication extends Application {
    public static  String TAG ;
    private static MyApplication myApplication;

public static MyApplication newInstance() {
        return myApplication;
    }

@Override
    public void onCreate() {
        super.onCreate();
        TAG = this.getClass().getSimpleName();
        myApplication = this;

}
}

 
然后在AndroidManifest.xml中添加网络权限和注册自定义的Application。
 
<uses-permission android:name="android.permission.INTERNET" />
<application
    android:name=".activity.MyApplication"
    ...
 
接着创建一个Volley网络请求管理类,代码如下所示:
 
public class HttpVolleyUtil {
    // 获取请求队列类
    public static RequestQueue mRequestQueue = Volley.newRequestQueue(MyApplication.newInstance());

//添加任务进任务队列
    public static void addRequest(Request<?> request, Object tag) {
        if (tag != null) {
            request.setTag(tag);
        }
        mRequestQueue.add(request);
    }

//取消任务
    public static void cancelRequest(Object tag){
        mRequestQueue.cancelAll(tag);
    }

}

 
最后就可以在方法中使用Volley网络工具类了:
 
/**
 *  new StringRequest(int method,String url,Listener listener,ErrorListener errorListener)
 *  method:请求方式,Get请求为Method.GET,Post请求为Method.POST
 *  url:请求地址
 *  listener:请求成功后的回调
 *  errorListener:请求失败的回调
 */
private void volleyGet() {
    String url = "http://...";
    StringRequest request = new StringRequest(Method.GET, url,
            new Listener<String>() {
                @Override
                public void onResponse(String s) {//s为请求返回的字符串数据
                    Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();
                }
            },
            new ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    Toast.makeText(MainActivity.this,volleyError.toString(),Toast.LENGTH_LONG).show();
                }
            });
    //将请求加入全局队列中
    HttpVolleyUtil.addRequest(request, "Tag");
}

Volley网络框架的使用的更多相关文章

  1. 谷歌Volley网络框架讲解——BasicNetwork类

    谷歌Volley网络框架讲解——BasicNetwork类 这个类是toolbox工具箱包里的,实现了Network接口. 先来看下Network这个interface,performRequest( ...

  2. 谷歌Volley网络框架讲解——第一篇

    自从公司新招了几个android工程师后,我清闲了些许.于是就可以有时间写写博客,研究一些没来的研究的东西. 今年的谷歌IO大会上,谷歌推出了自己的网络框架——Volley.不久前就听说了但是没有cl ...

  3. Volley网络框架完全解析(使用篇)

    在Android中,网络请求无非就这两种:HttpURLConnection和HttpClient( Apache),我们在使用时一般都会对它们进行一系列的封装,但是这过程不免有些繁琐,所以,Goog ...

  4. Volley网络框架完全解析(实战篇)

    好了,今天就通过一个瀑布流demo,来使用Volley框架请求网络图片. 前言: 我们使用NetworkImageView显示图片: 1.因为该控件可以自动的管理好请求的生命周期,当与父控件detac ...

  5. Volley网络框架完全解析(缓存篇)

    在上一篇中讲完了Volley框架怎么使用,那么这篇就来讲讲Volley框架的缓存机制 我们看Volley内部源码发现: Volley框架内部自己处理了DiskBasedCache硬盘缓存,但是没有处理 ...

  6. 谷歌Volley网络框架讲解——HttpStack及其实现类

    前两篇已经对网络请求流程已经梳理了个大概,这次我们着重看一下HttpStack和它的其实现类.我们之前在Network篇讲过它仅有一个实现类,而今天我们讲的HttpStack有两个实现类. 其中Htt ...

  7. 谷歌Volley网络框架讲解——网络枢纽

    研究了这么久的Volley,愈来愈发现这个框架的精美和人性化.比起民间一些框架强很多,一开始总是盲人摸象找不到头绪,现在终于有些明朗了.Volley其实就是一个请求队列的代理类,我们看下UML. 这就 ...

  8. 谷歌Volley网络框架讲解——Network及其实现类

    我们看到Network接口只有一个实现类BasicNetwork,而HttpStack有两个实现类. BasicNetwork这个类是toolbox工具箱包里的,实现了Network接口. 先来看下N ...

  9. Android网络框架源码分析一---Volley

    转载自 http://www.jianshu.com/p/9e17727f31a1?utm_campaign=maleskine&utm_content=note&utm_medium ...

随机推荐

  1. 【转】我是如何在SQLServer中处理每天四亿三千万记录的

    原文转自:http://blog.jobbole.com/80395/ 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文 ...

  2. 使用 itext、flying-saucer 实现html转PDF(转)

    转自 http://blog.csdn.net/mhouwei62/article/details/51394804 表示感谢 itext-2.1.7高于此版本已经更新为AGPL授权,不建议使用. 添 ...

  3. Lae程序员小漫画(二),仅供一乐

    Lae软件开发,快乐程序员!

  4. Java设计模式(十二) 策略模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...

  5. webStorm 多个项目并存

    点击file ->settings ->Directories 然后右侧有个Add Content Root 添加某个Root即可看见该root下的所有项目

  6. 《JavaScript DOM编程艺术》读后总结

    这是我读的第一本关于JS的书,刚开始我为了选择合适的学习JS的书,看了网上许多人的意见,基本上都是推荐先读这本书.书的内容挺简单的,确实很适合初学者看,阅读的过程中不会产生什么障碍.内容虽然简单,但我 ...

  7. jquery中的$的特殊用法

    通过父级元素选取子元素, $('父元素选择器,子元素选择器')        $('子元素选择器',父元素jquery对象); 通过$创建代码片段 $('<div/>',{ 'class' ...

  8. html EVENT对象

    Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! onabort 图像的加 ...

  9. Android使用AudioTrack发送红外信号

    最近要做一个项目,利用手机的耳机口输出红外信号,从而把手机变成红外遥控器,信号处理的知识基本都还给老师了,刚开始真的挺头疼.找了不少资料研究了一下,总算有点心得,在这里做个备忘. 一.音频信号输出原理 ...

  10. java数组引用

    public class Arriy { public static void main(String args[]){ int data[]=new int[3]; data[0]=10; data ...