(Android网络2)Volley

前言

Volley这一个网络请求框架,是我第一个学习的的网络框架,距离现在已经有一段时间没有用到的,这一个框架,学习起来还是蛮快的,因为它使用起来简单,可以实现大部分的网络请求,非常适合入门新手学习!但是有一点需要注意的是,这一个框架 不适合做数据的上传和下载,这一点非常重要,切记!

1.Volley介绍

Volley就是齐射,并发的意思,是Google I/0 2013上发布的 网络通信库,用于请求网络数据不大但频繁
特点:
1.通信快,简单,
2.GET,POST的网络请求及网络图片的高效异步请求,
3.可以对网络请求进行排序,
4.网络的缓存,
5.多级别取消请求,
6和Activity生命周期联动
功能:
1.高效的GET.POST数据请求交互
2.网络图片加载与缓存

2.使用

1.添加包或者依赖

  • AndroidStudio下添加gradle
compile 'com.mcxiaoke.volley:library:1.0.19'
  • Eclipse下添加包

2.建立请求队列

  • 在全局应用中设置队列
public class MyApplication extends Application {
    //建立请求队列
    public static RequestQueue queue;

    @Override
    public void onCreate() {
        super.onCreate();
        //实例化请求队列
        queue= Volley.newRequestQueue(getApplicationContext());

    }

    //暴露方法获取请求队列
    public static RequestQueue getHttpQueues(){
        return queue;
    }
}
  • AndroidManifest.xml文档中通过application标签设置属性android:name=上面的类,并添加请求网络权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.rhyme.httptest">

    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:name=".MyApplication"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

3.创建请求对象,简单的GET请求

 /**
     * @param url 请求地址
     * StringRequest(int method 请求类型,
     *            String url请求地址,
     *            Listener<String> listener请求成功回调,String response 返回的数据
     *            ErrorListener errorListener请求失败回调 VolleyError继承自异常Exception类)
     */
    public  void Volley_Get_String(String url){
        StringRequest request=new StringRequest(StringRequest.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // TODO: 2017/9/7 Success
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO: 2017/9/7 Error
            }
        });

        //添加标签,将这个请求标记,方便在众多请求中识别,因为Volley用于频繁的网络请求
        request.setTag("Tag_Get_String");

        //将该条请求添加到全局队列中
        MyApplication.getHttpQueues().add(request);
    }


  • 好的,让我们来传百度地址进这个方法,并在请求成功和失败都打印一下信息,可以看到百度的html文档

4.POST请求

   /**
     * @param url 请求地址
     * @param params 请求参数
     */
    public void Volley_POST_String(String url, final Map<String,String> params){
        StringRequest request=new StringRequest(StringRequest.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // TODO: 2017/9/7 Success
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO: 2017/9/7 Error
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return params;
            }
        };

        //添加标签,将这个请求标记,方便在众多请求中识别,因为Volley用于频繁的网络请求
        request.setTag("Tag_POST_String");

        //将该条请求添加到全局队列中
        MyApplication.getHttpQueues().add(request);
    }

5.取消请求

 //cancelAll()取消传入的标签所有请求,一般放在onStop中
        MyApplication.getHttpQueues().cancelAll("Tag_GET_String");

6.加载图片

   /**
     *ImageRequest(String url, 请求地址
     *              Response.Listener<Bitmap> listener, 请求成功返回bitmap
     *              int maxWidth, 最大宽度
     *              int maxHeight, 最大高度
     *              ScaleType scaleType, 图片缩放类型
     *              Config decodeConfig, 图片类型
     *              Response.ErrorListener errorListener 请求失败返回)
     */
    public void Volley_LoadImage(String url, final View view, String tag){
        ImageRequest imageRequest=new ImageRequest(
                url
                , new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {
                ((ImageView)view).setImageBitmap(response);
            }
        }
                , 300
                , 500
                ,ImageView.ScaleType.CENTER
                , Bitmap.Config.RGB_565
                , new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO: 2017/9/7 image set default picture 
            }
        });
        imageRequest.setTag(tag);
        MyApplication.getHttpQueues().add(imageRequest);
    }

7.加载图片,带缓存

1.添加缓存类实现ImageLoader.ImageCache
public class BitmapCache implements ImageLoader.ImageCache {
    private 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 url) {
        return cache.get(url);
    }
    @Override
    public void putBitmap(String url, Bitmap bitmap) {
            cache.put(url,bitmap);
    }
}
2.加载图片方法
    /**
     * 加载图片,有缓存
     * @param url 请求地址
     *
     *  ImageLoader(RequestQueue queue, 请求队列
     \             ImageCache imageCache)传入实现了ImageCache的类
     * getImageListener(final ImageView view,要显示的视图
                        final int defaultImageResId, 默认图片
                        final int errorImageResId)//加载失败图片
     */
    public void Volley_LoadImage_Cache(View view,String url){
        ImageLoader loader=new ImageLoader(MyApplication.getHttpQueues(),new BitmapCache());

        ImageLoader.ImageListener listener=ImageLoader.getImageListener((ImageView) view,R.mipmap.ic_launcher,R.mipmap.ic_launcher);

        loader.get(url,listener);

    }

3.NetWorkImageView( Volley的加载图片控件)
 public void Volley_LoadImage_Cache(NetworkImageView view, String url){
        ImageLoader loader=new ImageLoader(MyApplication.getHttpQueues(),new BitmapCache());

        view.setDefaultImageResId(R.mipmap.ic_launcher);//默认图片
        view.setErrorImageResId(R.mipmap.ic_launcher);//加载失败图片
        view.setImageUrl(url,loader);

    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值