Volley

简介

Volley意为齐射、并发的意思,是Google在2013年发布的Android平台上的网络通信库



特点

  • 网络通信更快,更简单(高效地Get、Post请求方式)
  • 网络图片加载与缓存
  • 请求排序(建立了请求队列)
  • 多级别取消请求
  • 可以与Activity的生命周期进行关联

注意:不适合数据的上传与下载



使用

网络请求队列的建立与取消

MyApplication.java

package com.example.demo;

import android.app.Application;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

/**
 * 创建全局的请求队列
 */
public class MyApplication extends Application {

    public static RequestQueue mRequestQueue;

    @Override
    public void onCreate() {
        super.onCreate();

        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    public static RequestQueue getRequestQueue(){
        return  mRequestQueue;
    }
}


Get与Post请求方式

有三个请求对象StringRequest、JsonObjectRequest、JsonArrayRequest,其中StringRequest包含了另外两个对象


Get请求方式

/**
  * 使用StringRequest发送Get请求      
  */
String url = "http://xxx/get?name=zhangsan&sex=male";
StringRequest request = new StringRequest(Request.Method.GET, url, 
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {

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

                }
            });
request.setTag("Get");
MyApplication.getRequestQueue().add(request);


/**
  * 使用JsonObjectRequest发送Get请求      
  */
String url = "http://xxx/get?name=zhangsan&sex=male";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, 
null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

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

            }
           });

request.setTag("Get");
MyApplication.getRequestQueue().add(request);


Post请求方式

/**
  * 使用StringRequest发送Post请求      
  */
String url = "http://xxx";
StringRequest request = new StringRequest(Request.Method.POST,url,
    new Response.Listener<String>(){
            @Override
            public void onResponse(String s) {

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

            }
     }){
         /**
           *
           * 用户在使用Post请求方式中参数的传递
           */
            @Override
     protected Map<String, String> getParams() throws AuthFailureError {
         Map<String,String> hashMap = new HashMap<>();
         hashMap.put("name","zhangsan");            
         hashMap.put("sex","male");
         return hashMap;
     }
};
request.setTag("Post");
MyApplication.getRequestQueue().add(request);        


/**
  * 使用JsonObjectRequest发送Post请求      
  */
String url = "http://xxxx";
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("name","zhangsan");
hashMap.put("sex","male");
JSONObject object = new JSONObject(hashMap);

JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
            }
        });

request.setTag("Post");
MyApplication.getRequestQueue().add(request);



与Activity的生命周期相关联

/**
 * 将Volley与Activity的生命周期进行关联
 */
   @Override
   protected void onStop() {
       super.onStop();
       /**
        * 通过给定的TAG值,将指定的队列全部关闭
        */
   MyApplication.getRequestQueue().cancelAll("Post");
   }



网络图片加载

String url = "https://www.baidu.com/img/bdlogo.png";
ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
       @Override
       public void onResponse(Bitmap bitmap) {

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

            }
    });

request.setTag("Get");
MyApplication.getRequestQueue().add(request);



网络图片加载并缓存

package com.example.demo;

import android.graphics.Bitmap;
import android.util.LruCache;

import com.android.volley.toolbox.ImageLoader;

public class BitmapCache implements ImageLoader.ImageCache {

    LruCache<String,Bitmap> cache;
    int max = 10*1024*1024;

    public BitmapCache(){
        cache = new LruCache<String,Bitmap>(max){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getRowBytes()*value.getHeight();
            }
        };
    }

    @Override
    public Bitmap getBitmap(String s) {
        return cache.get(s);
    }

    @Override
    public void putBitmap(String s, Bitmap bitmap) {
        cache.put(s,bitmap);
    }
}

方式一

String url = "https://www.baidu.com/img/bdlogo.png";

ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());

ImageListener listener = ImageLoader.getImageListener(iv,R.drawable.default,R.drawable.error)
imageLoader.get(url,listener);

方式二

String url = "https://www.baidu.com/img/bdlogo.png";

ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());

NetworkImageView networkImageView=(NetworkImageView)findViewById(R.id.img); networkImageView.setDefaultImageResId(R.drawable.default);    networkImageView.setErrorImageResId(R.drawable.error);      networkImageView.setImageUrl(url,imageLoader);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值