美文网首页
android Volley网络请求框架使用

android Volley网络请求框架使用

作者: WeiAai | 来源:发表于2017-05-31 14:59 被阅读0次

    我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。

    不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。

    Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

    get请求

    private voidget(){

    RequestQueue rq= Volley.newRequestQueue(getApplicationContext());

    StringRequest有三个参数  一个是请求地址  一个是强求成功调用的方法,一个是请求失败调用的方法

    StringRequest sr=new StringRequest(url, newResponse.Listener() {

    @Override

    public voidonResponse(String s) {    textView.setText(s.toString());   }

    }, newResponse.ErrorListener() {

    @Override

    public voidonErrorResponse(VolleyError volleyError) {}

    });

    rq.add(sr);

    }


    POST方法

    RequestQueue rq= Volley.newRequestQueue(getApplicationContext());

    StringRequest stringRequest =newStringRequest(Request.Method.POST,url, newResponse.Listener() {

    @Override

    public voidonResponse(String s) {

    }

    }, newResponse.ErrorListener() {

    @Override

    public voidonErrorResponse(VolleyError volleyError) {

    }

    }) {

    @Override

    protectedMapgetParams()throwsAuthFailureError {

    Map map =newHashMap();

    map.put("参数1","value1");

    map.put("参数2","value2");

    returnmap;

    }

    };

    rq.add(stringRequest);

    }

    用Volley加载图片,使用这么一个方法

    private voidimage(){

    RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());

    ImageRequest imageRequest =newImageRequest(

    "http://img02.tooopen.com/images/20141231/sy_78327074576.jpg",

    newResponse.Listener() {

    @Override

    public voidonResponse(Bitmap response) {

    imageView.setImageBitmap(response);

    }

    },0,0,Bitmap.Config.ARGB_8888, newResponse.ErrorListener() {

    @Override

    public voidonErrorResponse(VolleyError error) {

    imageView.setImageResource(R.mipmap.ic_launcher);

    }

    });

    mQueue.add(imageRequest);

    }

    可以看到,ImageRequest的构造函数接收六个参数,第一个参数就是图片的URL地址,这个没什么需要解释的。第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中。第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,这里可以设置为null,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。

    加载网络图片并缓存

    写一个ImageCache起到图片缓存的作用

    public classBitmapCacheimplementsImageLoader.ImageCache {

    privateLruCachemCache;

    publicBitmapCache() {

    intmaxSize =10*1024*1024;  //这个是缓存大小    10M

    mCache=newLruCache(maxSize) {

    @Override

    protected intsizeOf(String key,Bitmap bitmap) {

    returnbitmap.getRowBytes() * bitmap.getHeight();

    }

    };

    }

    @Override

    publicBitmapgetBitmap(String url) {

    returnmCache.get(url);

    }

    @Override

    public voidputBitmap(String url,Bitmap bitmap) {

    mCache.put(url,bitmap);

    }

    }

    这样我们就可以用这个类进行缓存图片  接下来进行缓存

    RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());

    ImageLoader imageLoader =newImageLoader(mQueue, newBitmapCache());

    ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView,

    R.mipmap.ic_launcher,R.mipmap.ic_launcher_round);

    imageLoader.get("http://img02.tooopen.com/images/20141231/sy_78327074576.jpg",listener);

    //imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener, 200, 200);

    加载图片参考

    网络请求加载参考

    相关文章

      网友评论

          本文标题:android Volley网络请求框架使用

          本文链接:https://www.haomeiwen.com/subject/yaxjfxtx.html