Android working with Volley 详解

Volley是google官方推出的一个开源网络访问库,在项目中直接使用它,而不需要写一大堆的重复的代码;

项目主页:

https://android.googlesource.com/platform/frameworks/volley

Volley中一个重要的类就是RequestQueue,不用多说,只看命名就知道它是一个请求队列,用于存放我们添加进去的网络请求;

我们可以通过Volley.newRequestQueue(Context context);获取一个RequestQueue对象,通常一个应用程序中使用一个RequestQueue实例即可,因此可以把RequestQueue实例存放在Application中,当做一个全局变量;

下面直接通过例子来学习此开源库的使用;

一、字符串请求

protected void stringRequest() { String url = "http://www.baidu.com"; StringRequest sr = new StringRequest(Method.GET, url, new Listener<String>() { @Override public void onResponse(String response) { Log.e(tag, "" + response); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); sr.setTag("tag"); reqQueue.add(sr); }

其中reqQueue即为RequestQueue实例对象(同下文);
我们只需要产生一个StringRequest实例,然后添加进RequestQueue队列当中即可,在创建实例的时候,会分别设置请求成功和请求失败时的监听回调,在监听器里面我们可以做相应的处理;

二、Json请求

Json请求分别两种,分别是JsonObjectRequest和JsonArrayRequest,下边我们来看一个JsonObjectRequest请求;

protected void jsonObjectRequest() { String url = "http://m.weather.com.cn/data/101010100.html"; JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET, url, null, new Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.e(tag, "" + response); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); jor.setTag("tag"); reqQueue.add(jor); }

和StringRequest相仿,不再表述,同理JsonArrayRequest也是一样;

三、图片请求

protected void imageRequest() { iv = (ImageView) findViewById(R.id.iv); String url = "http://img0.bdstatic.com/img/image/shouye/hjxnzz04.jpg"; ImageRequest ir = new ImageRequest(url, new Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { iv.setImageBitmap(response); } }, 0, 0, Config.RGB_565, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { iv.setImageResource(R.drawable.ic_launcher); } }); ir.setTag("tag"); reqQueue.add(ir); // ImageRequest的构造函数接收六个参数 // url:图片的URL地址 // listener:图片请求成功的回调 // maxWidth:允许图片最大的宽度,指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩. // maxHeight:允许图片最大的高度 // decodeConfig:图片的颜色属性 // errorListener:图片请求失败的回调 }

ImageRequest和StringRequest差不多,不过可以通过设置maxWidth和maxHeight对图片进行压缩;
在上面这个请求中,我们只把请求回来的图片直接设置给了ImageView,并没有做其它处理,是否有点不严谨,内存溢出了咋办?请看下面!

四、ImageLoader

protected void imageLoader() { iv = (ImageView) findViewById(R.id.iv); String url = "http://img0.bdstatic.com/img/image/shouye/hjxnzz04.jpg"; ImageLoader loader = new ImageLoader(reqQueue, new BitmapCache()); ImageListener listener = new ImageListener() { @Override public void onErrorResponse(VolleyError error) { } @Override public void onResponse(ImageContainer response, boolean isImmediate) { } }; // listener = ImageLoader.getImageListener(iv, R.drawable.ic_launcher, // R.drawable.ic_launcher); loader.get(url, listener, 0, 0); // ImageLoader明显要比ImageRequest更加高效,它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求. // 它的内部也是使用ImageRequest来实现的; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d4623144501e955441416731ce045e89.html