Volley介绍简介

Volley介绍简介

齐射、迸发

volley是Android平台上的网络通信库

特点:

  • 通信更简单、更快
  • Get、Post 网络请求及网络图像的高效率异步处理请求
  • 排序
  • 网络请求的缓存
  • 多级别取消请求
  • 和Activity生命周期的联动

功能:

  • 高效的Get/Post方式的数据请求交互
  • 网络图片加载和缓存
  • 官方推出、性能稳定和强劲

Volley的使用

  1. Volley的Get和Post请求方式的使用
  2. Volley的网络请求队列建立和取消
  3. Volley与Activity生命周期的联动
  4. Volley的简单的二次回调封装
Volley的Get和Post请求方式的使用

1、挑选合适的对象

  • StringRequest //对返回结果不确定类型(包括后面两种)
  • JsonObjectRequest //确定类型
  • JsonArrayRequest

2、回调的使用

Volley的网络请求队列建立和取消队列请求

1、建立队列请求

2、取消队列请求

Volley与Activity生命周期的联动

特点:Activity销毁时,同时关闭请求

关键点:

  • 设置Tag标签,onStop()方法里执行取消队列请求
Volley的简单的二次回调封装

优势:

  • 全局使用一个方式,可控,可自定义需求,灵活方便

使用Get方式请求网络数据:

  1. 建立一个全局application类

    public class VolleyApplication extends Application
    {
    private static RequestQueue request;
    @Override
    public void onCreate()
    {
    super.onCreate();

        request=Volley.newRequestQueue(getApplicationContext());
    }
    
    public static RequestQueue getHttpRequestQueue(){
        return request;
    }
    

    }

在主活动中获取数据并存储在请求队列中
1、使用StringRequest

private void request_Get()
{
    String url="http://10.207.116.24:8888/GooglePlayServer/home?index=0";
    StringRequest request=new StringRequest(Method.GET, url, new Listener<String>() {

        @Override
        public void onResponse(String response)
        {
            Toast.makeText(MainActivity.this, response, 1).show();
        }
        }, new ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error)
        {
            Toast.makeText(MainActivity.this, error.toString(), 0).show();
        }
    });
    request.setTag("VolleyGet");//添加到队列中
    VolleyApplication.getHttpRequestQueue().add(request);

}

2、使用JsonObjectRequest

private void requestJson_Get()
{
    String url="http://10.207.116.24:8888/GooglePlayServer/home?index=0";
    JsonObjectRequest objectGet=new JsonObjectRequest(Method.GET, 
          url, null, new Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response)
        {
            Toast.makeText(MainActivity.this, response.toString(), 1).show();
        }
    }, new ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error)
        {
            Toast.makeText(MainActivity.this, error.toString(), 0).show();
        }
    });
    objectGet.setTag("VolleyPost");//添加到队列中
    VolleyApplication.getHttpRequestQueue().add(objectGet);

}

使用post方式使用Volley请求网络数据

1、使用StringRequest

private void request_Post()
{
    String url="http://10.207.116.24:8888/GooglePlayServer/home?";
    StringRequest request=new StringRequest(Method.GET, url, new Listener<String>() {

        @Override
        public void onResponse(String response)
        {
            Toast.makeText(MainActivity.this, response, 1).show();
        }
    }, new ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error)
        {
            Toast.makeText(MainActivity.this, error.toString(), 0).show();
        }
    }){
        //post方式多出来头信息在这里传进去
        @Override
        protected Map<String, String> getParams() throws AuthFailureError
        {

            Map<String ,String> hasMap=new HashMap<String, String>();
            hasMap.put("index", "0");
            //hasMap.put("","");
            return hasMap;


        }
    };
    request.setTag("VolleyPost");//添加到队列中
    VolleyApplication.getHttpRequestQueue().add(request);
}

2、使用JsonObjectRequest进行Post方式提交网络请求

private void requestJson_post()
{
    String url="http://10.207.116.24:8888/GooglePlayServer/home?";
    Map<String ,String> hasMap=new HashMap<String, String>();
    hasMap.put("index", "0");
    JSONObject object=new JSONObject(hasMap);

    JsonObjectRequest objectRequest=new JsonObjectRequest(Method.GET, url, object, new Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response)
        {
            Toast.makeText(MainActivity.this, response.toString(), 1).show();
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error)
        {
            Toast.makeText(MainActivity.this, error.toString(), 0).show();
        }
    });
    objectRequest.setTag("VolleyPost");//添加到队列中
    VolleyApplication.getHttpRequestQueue().add(objectRequest);
}

加载图片缓存功能简单介绍

1、LruCache

2、ImageCache

加载网络图片的监听

ImageLoader 、 ImageRequest 、NetworkImageView、ImageListener

使用ImageRequest加载图片:

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    img=(ImageView) findViewById(R.id.img_volley);
    String url="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
     ImageRequest request=new ImageRequest(url, new Listener<Bitmap>() {

            @Override
            public void onResponse(Bitmap arg0)
            {
                img.setImageBitmap(arg0);
            }
        }, 0, 0, Config.RGB_565, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError arg0)
            {
                img.setImageResource(R.drawable.ic_launcher);
            }
        });
//存储到队列中
     MyApplication.getRequest().add(request);
}

使用ImageLoader获取网络图片

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    img=(ImageView) findViewById(R.id.img_volley);
    String url="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";

    ImageLoader loader=new ImageLoader(MyApplication.getRequest(), new BitmapCache());

    ImageListener listener=ImageLoader.getImageListener(img,
                R.drawable.ic_launcher, R.drawable.ic_launcher);//加载默认图片、加载失败图片

    loader.get(url, listener);

}

自定义BitmapCache

public class BitmapCache implements ImageCache
{
    public LruCache<String ,Bitmap>cache;
    private 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 arg0)
    {
        return cache.get(arg0);
    }

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

}

使用NetworkImageView控件加载网络图片,先实例化

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    img=(ImageView) findViewById(R.id.img_volley);
    netImageView=(NetWorkImageView)findViewById(R.id.network);


    String url="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";

    ImageLoader loader=new ImageLoader(MyApplication.getRequest(), new BitmapCache());

    netImageView.setDefaultImageResId(R.drawable.ic_launcher);
    netImageView.setErrorImageResId(R.drawable.ic_launcher);
    netImageView.setImageUrl(url,loader);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值