Android Volley

    一、简介

        1)所谓Volley,它是2013年Google I/O上发布的一款网络框架,基于Android平台,能使网络通信更快,更简单,更健全。
        2)优点
             (1)  网络请求的排序(scheduling)
             (2)  网络请求的优先级处理
             (3)  缓存
             (4)  多级别取消请求
             (5)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
             (6)  非常适合去进行数据量不大,但通信频繁的网络操作
             (7)  可以自定义拓展
        3)缺点
            对于大数据量的网络操作,比如说下载文件等,Volley的表现不好


    二、下载地址

        1)官网地址:https://android.googlesource.com/platform/frameworks/volley
        2)jar包下载地址:链接:https://pan.baidu.com/s/1yzEfMNn7g8tQOCnu8jN74A   提取码:gbs6 


    三、API

        1)请求String类型数据:StringRequest
        2)请求JSON数据:JsonRequest(JsonObjectRequest (对象)、JsonArrayRequest(数组))
        3)请求图片数据:ImageRequest


    四、使用步骤

        1)导入jar包
        2)添加联网权限 

 <uses-permission android:name="android.permission.INTERNET" />


    五、例子

        1)网络请求
            (1)get请求

                //1.创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
                //2.创建一个请求
                String uri = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
                StringRequest stringRequest = new StringRequest(uri, new Response.Listener<String>() {
                    //正确接收数据的回调
                    @Override
                    public void onResponse(String response) {
                        tvVolleyResult.setText(response);

                    }
                }, new Response.ErrorListener() {
                    //发生异常后的监听回调
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        tvVolleyResult.setText("加载失败"+error);
                    }
                });
                //3.将创建的请求添加到请求队列中
                requestQueue.add(stringRequest);

            (2)post请求

                //1.创建一个请求队列
                RequestQueue requestQueue1 = Volley.newRequestQueue(VolleyActivity.this);
                //2.创建一个post请求
                String uri1 = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
                StringRequest stringRequest1 = new StringRequest(Request.Method.POST, uri1, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        tvVolleyResult.setText(response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        tvVolleyResult.setText("请求失败"+error);
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String,String> map = new HashMap<>();
//                        map.put("value","param");//带参数post
                        return map;

                    }
                };
                //3.将创建的请求添加到请求队列中
                requestQueue1.add(stringRequest1);

            (3)请求json数据

                //1.创建一个请求队列
                RequestQueue requestQueue2 = Volley.newRequestQueue(VolleyActivity.this);
                //2.创建一个请求
                String uri2 = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
                JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(uri2, new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        tvVolleyResult.setText(response.toString());
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        tvVolleyResult.setText("请求失败"+error);
                    }
                });
                //3.将创建的请求添加到请求队列中
                requestQueue2.add(jsonArrayRequest);


        2)图片加载
            (1)ImageRequest加载图片

                //1.创建一个请求队列
                RequestQueue requestQueue3 = Volley.newRequestQueue(VolleyActivity.this);
                //2.创建一个图片的请求
                String uri3 = "http://img.wxcha.com/file/201603/07/7ec4c7c1f7.jpg";
                ImageRequest imageRequest = new ImageRequest(uri3, new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap response) {
                        ivVolleyResult.setVisibility(View.VISIBLE);
                        ivVolleyResult.setImageBitmap(response);
                    }
                }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        ivVolleyResult.setImageResource(R.mipmap.ic_launcher);
                    }
                });
                //3.将创建的请求添加到请求队列中
                requestQueue3.add(imageRequest);

            (2)ImageLoader加载图片

                //1.创建一个请求队列
                RequestQueue requestQueue4 = Volley.newRequestQueue(VolleyActivity.this);
                //2.创建一个imageloader
                ImageLoader imageLoader = new ImageLoader(requestQueue4, new ImageLoader.ImageCache() {
                    @Override
                    public Bitmap getBitmap(String url) {
                        return null;
                    }

                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {

                    }
                });
                //3.加载图片
                String uri5 = "http://www.shuoshuokong.com/uploads/allimg/150929/1-15092Z11017.jpg";
                ivVolleyResult.setVisibility(View.VISIBLE);
                ImageLoader.ImageListener imageListener = imageLoader.getImageListener(ivVolleyResult,R.mipmap.ic_launcher,R.drawable.atguigu_logo);
                imageLoader.get(uri5,imageListener);

                带缓存的加载图片:

缓存工具类:

package com.atguigu.android.atguigu.volley;

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

import com.android.volley.toolbox.ImageLoader;

/**
 * Created by Administrator on 2016/10/13.
 */
public class BitmapCache implements ImageLoader.ImageCache {
    private LruCache<String, Bitmap> mCache;

    public BitmapCache() {
        int maxSize = 10 * 1024 * 1024;
        mCache = new LruCache<String, Bitmap>(maxSize) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                return bitmap.getRowBytes() * bitmap.getHeight();
            }
        };
    }

    @Override
    public Bitmap getBitmap(String url) {
        return mCache.get(url);
    }

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

修改代码:

                //1.创建一个请求队列
                RequestQueue requestQueue4 = Volley.newRequestQueue(VolleyActivity.this);
                //2.创建一个imageloader
//                ImageLoader imageLoader = new ImageLoader(requestQueue4, new ImageLoader.ImageCache() {
//                    @Override
//                    public Bitmap getBitmap(String url) {
//                        return null;
//                    }
//
//                    @Override
//                    public void putBitmap(String url, Bitmap bitmap) {
//
//                    }
//                });
                ImageLoader imageLoader = new ImageLoader(requestQueue4, new BitmapCache());
                //3.加载图片
                String uri5 = "http://www.shuoshuokong.com/uploads/allimg/150929/1-15092Z11017.jpg";
                ivVolleyResult.setVisibility(View.VISIBLE);
                ImageLoader.ImageListener imageListener = imageLoader.getImageListener(ivVolleyResult,R.mipmap.ic_launcher,R.drawable.atguigu_logo);
                imageLoader.get(uri5,imageListener);

            (3)NetworkImageView加载图片
                布局:com.android.volley.toolbox.NetworkImageView

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/iv_volley_networkimagview"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:visibility="gone">

    </com.android.volley.toolbox.NetworkImageView>
                //1.让控件显示
                ivVolleyNetworkimagview.setVisibility(View.VISIBLE);
                //2.创建一个请求队列
                RequestQueue requestQueue5 = Volley.newRequestQueue(VolleyActivity.this);
                //3.创建一个imageloader
                ImageLoader imageLoader1 = new ImageLoader(requestQueue5,new BitmapCache());
                //4.设置默认图片和异常图片
                ivVolleyNetworkimagview.setDefaultImageResId(R.mipmap.ic_launcher);
                ivVolleyNetworkimagview.setErrorImageResId(R.drawable.atguigu_logo);
                //5.加载图片
                String uri6 = "http://126306.sgss8.com/upload/2016042922/224504_267.jpg";
                ivVolleyNetworkimagview.setImageUrl(uri6,imageLoader1);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值