网络加载框架之Volley

本文详细介绍了Volley网络框架的特点及使用方法,包括其优势与局限性,并通过具体实例展示了如何进行网络请求、图片加载等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:简介

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包下载地址:http://download.youkuaiyun.com/detail/sinyu890807/7152015

3):https://pan.baidu.com/s/1QAFqbmsq1h3RhgqbQbAJHQ 密码:h71d

三:API

1)请求String类型数据:StringRequest

2)请求JSON数据:JsonRequest

   JsonObjectRequest、JsonArrayRequest

3)请求图片数据:ImageRequest

四:使用步骤

1)导入jar包

2)添加联网权限

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

五:例子

1)网络请求

(1)get请求

      // get请求
        bt_volley_get.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个请求
                String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";

                StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
                    // 正确接收数据回调
                    @Override
                    public void onResponse(String s) {
                        tv_volley_result.setText(s);
                    }
                }, new Response.ErrorListener() {// 发生异常后的监听回调
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        tv_volley_result.setText("加载失败" + volleyError);
                    }
                });

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

(2)post请求

    // post请求
        bt_volley_post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个post请求
                String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
                StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        tv_volley_result.setText(s);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        tv_volley_result.setText("请求失败" + volleyError);
                    }
                }) {
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {

                        Map<String, String> map = new HashMap<String, String>();
//                        map.put("value1","param1");

                        return map;
                    }
                };

                // 3 将post请求添加到队列中
                requestQueue.add(stringRequest);
            }
        });

(3)请求json数据

     // 获取json数据
        bt_volley_getjson.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个请求
                String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
                JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject jsonObject) {
                        tv_volley_result.setText(jsonObject.toString());
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        tv_volley_result.setText("请求失败" + volleyError);
                    }
                });

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

2)图片加载

(1)ImageRequest加载图片

        // imagerequest加载图片
        bt_volley_imagerequest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个图片的请求
                String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
                ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap bitmap) {
                        // 正确接收到图片
                        iv_volley_result.setVisibility(View.VISIBLE);
                        iv_volley_result.setImageBitmap(bitmap);
                    }
                }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        iv_volley_result.setImageResource(R.drawable.atguigu_logo);
                    }
                });

                // 3 将请求添加到请求队列中
                requestQueue.add(imageRequest);
            }
        });

(2)ImageLoader加载图片

  // imageloader加载图片
        bt_volley_imageloader.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

               //  创建一个imageloader
                ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
                    @Override
                    public Bitmap getBitmap(String s) {
                        return null;
                    }

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

                    }
                });
//                ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());

                // 加载图片
                String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
                iv_volley_result.setVisibility(View.VISIBLE);
                ImageLoader.ImageListener imageListener = imageLoader.getImageListener(iv_volley_result, R.drawable.atguigu_logo, R.drawable.atguigu_logo);
                imageLoader.get(url, imageListener);
            }
        });

缓存工具类

package com.atguigu.android.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;// 10m
        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);
    }
}

使用缓存工具类加载图片

        bt_volley_imageloader.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

               //  创建一个imageloader
//                ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
//                    @Override
//                    public Bitmap getBitmap(String s) {
//                        return null;
//                    }
//
//                    @Override
//                    public void putBitmap(String s, Bitmap bitmap) {
//
//                    }
//                });
                ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());

                // 加载图片
                String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
                iv_volley_result.setVisibility(View.VISIBLE);
                ImageLoader.ImageListener imageListener = imageLoader.getImageListener(iv_volley_result, R.drawable.atguigu_logo, R.drawable.atguigu_logo);
                imageLoader.get(url, imageListener);
            }
        });

(3)NetworkImageView加载图片

布局使用 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>

   // networkimageview加载图片
        bt_volley_networkimageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 让控件显示
                iv_volley_networkimagview.setVisibility(View.VISIBLE);

                // 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 创建一个Imageloader
                ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());

                // 默认图片和异常图片设置
                iv_volley_networkimagview.setDefaultImageResId(R.drawable.atguigu_logo);
                iv_volley_networkimagview.setErrorImageResId(R.drawable.atguigu_logo);

                // 加载图片
                String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
                iv_volley_networkimagview.setImageUrl(url, imageLoader);
            }
        });
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值