Volley框架的使用介绍

1. Volley框架可以做什么

Volley是一个把AsyncHttpClient和Universal-image-loader结合到一起而出现的一个框架。

  • 它可以处理数据量不大且请求频繁的的网络请求操作;
  • Volley下面也有一个ImageLoader的工具类来进行对图片的缓存
  • 提供了一个extend了ImageView的NetworkImageView工具类,可以使用它来加载网络图片;

2. Volley常用的一些类

  • Request—-对于所有网络请求最基础的类

    • Request的使用:
      1. 可以在其他类中调用
      2. 可以在自己的项目中自定义Request类,重写里面的构造方法和一些规定了的必须要implements的方法
    • Request类一些常用的方法:
      1. setRequestQueue( ):通过所给的队列把请求联系起来,当请求完成的时候,这个请求队列会被通知
      2. parseNetworkResponse( ):extend Request后必须要实现的方法,它是去解析原始网络的响应,并且返回一个适当的响应类型。这个方法会在一个工作的线程中被调用,如果解析返回的结果为null,这个响应不会被递送出去。
      3. deliverResponse( ):extend Request后必须要实现的方法,它是将解析响应的结果递送给监听器,而且所给的这个响应被保证它不为null,响应解析失败将不会被递送出去
  • RequestQueue—-用一个调度线程的线程池来调度的请求调度队列

可以在MyApplication类里面将网络请求操作放到请求队列里面,代码如下:

public static RequestQueue getmRequestQueue(){
        if(null == mRequestQueue){
            mCookieStore = new PersistentCookieStore(getInstance());
            mHttpClient = HttpClients.custom()
                    .setConnectionManager(new PoolingHttpClientConnectionManager())
                    .setDefaultCookieStore(mCookieStore)
                    .build();
            mRequestQueue = Volley.newRequestQueue(getInstance(), new HttpClientStack(mHttpClient));  //newRequestQueue()是创建一个默认的线程池实例
        }
        return mRequestQueue;
}

在具体的业务逻辑里面(如登录)会通过RequestQueue.add( )方法来将请求添加到请求队列里面,代码如下:

private void login() {
        String psw = mEditPass.getText().toString().trim();
        String userName = mEditName.getText().toString().trim();

        if (TextUtils.isEmpty(userName)) {  
            ViewAnim.shakeView(this, findViewById(R.id.tv_user_name)); //用户名和密码为空的动画效果
        }else if (TextUtils.isEmpty(psw)) {
            ViewAnim.shakeView(this, findViewById(R.id.tv_psw));
        }else {
            HashMap params = new HashMap();
            params.put(URLs.PARAMS_KEY_ACTION, URLs.PARAMS_ACTION_VALUE_LOGIN);
            params.put(URLs.PARAMS_PSW, psw);
            params.put(URLs.PARAMS_USER_NAME, userName);

            RequestWrapper request = new RequestWrapper<>(URLs.URL_LOGIN(), Data.class, getResponsListener()); //实例化自定义的构造方法
            request.addParams(params);

            request.setShouldCache(false); //RequestQueue有两种:本地缓存队列和网络队列,设置为false表示将request放入网络队列
            MyApplication.getmRequestQueue().add(request);
        }
    }

你可能感兴趣的:(Android)