Volley(一)

    xiaoxiao2021-03-25  98

    首先,我使用的是AndroidStudio,用的依赖是:compile 'com.android.volley:volley:1.0.0'

    Eclipse开发可以到GitHub上下载,然后导入。https://github.com/google/volley

    Volley是集请求,图片,文件下载于一身的框架,在面对数据量小,请求次数多时发挥功能强大,而面对大文件下载等大数据传输时则力不从心。

    Volley请求网络都是基于请求队列的,我们只需要将请求放在队列中,则会在队列以此处理,因此在大量网络请求,队列发挥着重要作用。

    Volley:

    RequestQueue 用来执行请求的请求队列

    Request 用来构造请求对象

    Request:

    StringRequest 响应的主体为字符串

    JsonArrayRequest 发送和请求Json数组

    JsonObjectRequest 发送和接收Json对象

    ImageRequest 发送和接收Image图片

    使用:

    首先我们需要创建一个ResuestQueue,然后再创建自己需要的请求并通过 add 来将其添加进请求队列中。 requestQueue = Volley.newRequestQueue(context);

    然后需要创建自己的请求对象,这里的例子是使用StringRequest类,得到的是String类型的网络数据,并将该请求对象添加至请求队列中,等待相应:

    StringRequest s = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { return super.getParams(); } }; 这里我们使用Post请求方式来进行访问url,之后再StringRequest类中又重写了getParams方法是为了添加请求参数。

    还有现在最常用的JSON格式:

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(jsonObjectRequest);

    在此,我们是访问网络数据。

    在Volley中还嵌入ImageLoader框架,用于网络图片处理,方法和上面很像,也是在列队中添加一个Request请求对象,之后列队会为我们处理该请求。

    使用ImageRequest来完成这一请求编码

    ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { } }, 100, 100, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(imageRequest); 使用ImageLoader:

    在Volley中的ImageLoader内部也是使用ImageRequest来实现的,但是ImageLoader比其更加高效,因为他不仅可以帮我们队图片进行缓存,还可以过滤重复的链接,避免出现重复请求。该现象在ListView、GridView上更加明显。

    方法和之前有所不同,首先需要创建Queue队列(第一步一样)。

    第二,创建ImageLoader对象,其中就需要将队列对象传进去:

    ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) { return null; } @Override public void putBitmap(String url, Bitmap bitmap) { } }); 第三步,就是调用 ImageLoader的getImageListener 方法,第一个参数是放置的控件,第二个是加载时的图片,第三个图片是加载失败时显示的图片。

    ImageLoader.ImageListener imageListener = imageLoader.getImageListener(imageView, R.drawable.ic_launcher, R.drawable.ic_launcher); 在最后,调用ImageLoad的 get 方法放置我们的url和配置好的imageListener。当然他也有设置图片大小的重载方法。

    imageLoader.get(url, imageListener); 以上是对ImageLoader的基本用法,而高级用法都在 cache 中。在此推荐使用LruCache功能进行缓存。

    class BitmapCache implements ImageLoader.ImageCache { public LruCache<String, Bitmap> lruCache; public BitmapCache() { lruCache = new LruCache<String, Bitmap>(8 * 1024 * 1024) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return lruCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { lruCache.put(url, bitmap); } } 这里实现了ImageCache接口,并在其中使用LruCahce集合来做缓存。

    NetworkImageView

    在最后,Volley还提供了第三种方式加载网络图片。NetworkImageView控件。

    1.创建RequestQueue列队

    2.创建ImageLoader对象

    3.在布局中添加该控件

    4.在代码中找到该控件并设置要加载的图片地址

    networkImageView.setDefaultImageResId(R.drawable.default_image); networkImageView.setErrorImageResId(R.drawable.failed_image); networkImageView.setImageUrl("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", imageLoader);

    当然,我们可以继承Request类来自己定义自己的请求方式,确认得到制定的返回格式。

    转载请注明原文地址: https://ju.6miu.com/read-20911.html

    最新回复(0)