原 Volley框架之网络请求和图片加载

Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架。

Volley的特性

(1).封装了的异步的请求API。Volley 中大多是基于接口的设计,可配置性强。
(2).一个优雅和稳健的请求队列,一定程度符合 Http 规范,包括请求头的处理,缓存机制的支持等。
(3).自定义的网络图像加载视图(NetworkImageView,ImageLoader等) 。
(4). 提供简便的图片加载工具。

本案例包含get,post请求和几种网络图片加载的方式,效果如图:

      

辅助类 ApplicationController.java

/**
 *
 *
 * 使用请求队列
 * Volley的所有请求都放在一个队列,然后进行处理,这里是你如何将创建一个请求队列
 * @author Administrator
 *
 */
public class ApplicationController extends Application {

     public static RequestQueue queue;

        @Override
        public void onCreate() {
            super.onCreate();
            queue = Volley.newRequestQueue(getApplicationContext());//使用全局上下文
        }

        public static RequestQueue getHttpQueue() {
            return queue;
        } 

}
/****
 *
 * Volley之网络请求
 *
 * 包含两种  get 和   post 请求方式
 *
 * @author Administrator
 *
 */
public class VolleyRequest extends Activity implements OnClickListener {

    private RequestQueue mQueue;
    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_http);
        mQueue = ApplicationController.queue;// Volley.newRequestQueue(this);
        VolleyUtil.initialize(VolleyRequest.this);
        initView();

    }

    private void initView() {
        // TODO Auto-generated method stub
        findViewById(R.id.get).setOnClickListener(this);
        findViewById(R.id.post).setOnClickListener(this);
        findViewById(R.id.get1).setOnClickListener(this);
        findViewById(R.id.post1).setOnClickListener(this);
        mTextView = (TextView) findViewById(R.id.textView1);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.get:
            get();
            break;
        case R.id.get1:
            get1();
            break;
        case R.id.post:
            post();
            break;
        case R.id.post1:
            post1();
            break;
        default:
            break;
        }

    }

    private void get() {
        // 列如
        String url = "https://www.baidu.com";
        mQueue.add(new StringRequest(Method.GET, url, new Listener<String>() {
            @Override
            public void onResponse(String arg0) {
                mTextView
                        .setText("------------------------------------get1-----------------------------------------   \n\n"
                                + arg0);
            }
        }, new ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError arg0) {
                Toast.makeText(VolleyRequest.this, "Get请求失败", 2).show();
            }

        }));

    }

    private void get1() {

        String url = "https://www.baidu.com";
        StringRequest request = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        mTextView
                                .setText("------------------------------------get2-----------------------------------------   \n\n"
                                        + s);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        Toast.makeText(VolleyRequest.this, "Get请求失败", 2).show();
                    }
                });
        // 设置取消取消http请求标签 Activity的生命周期中的onStiop()中调用
        request.setTag("volleyget");
        ApplicationController.getHttpQueue().add(request);

    }

    public void post() {
        RequestQueue requestQueue = Volley.newRequestQueue(VolleyRequest.this);
        StringRequest stringRequest = new StringRequest(Request.Method.POST,
                "https://route.showapi.com/32-9",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        mTextView
                                .setText("------------------------------------post1-----------------------------------------   \n\n"
                                        + response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(VolleyRequest.this, "请求失败", 2).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {
                // 在这里设置需要post的参数

                return showMap();
            }
        };
        requestQueue.add(stringRequest);
    }

    public void post1() {
        RequestQueue requestQueue = ApplicationController.getHttpQueue();
        Request<JSONObject> request = new NormalPostRequest(
                "https://route.showapi.com/32-9",
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        mTextView
                                .setText("------------------------------------post2---------------------------------------   \n\n"
                                        + response.toString());
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(VolleyRequest.this, "请求失败", 2).show();
                    }
                }, showMap());
        requestQueue.add(request);
    }

    /***
     *
     * 接口POST参数
     *
     * @return Map
     */

    private Map<String, String> showMap() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("q", "test");
        map.put("showapi_appid", "11548");
        map.put("showapi_timestamp", "20160511115654");
        map.put("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
        return map;
    }

    @Override
    protected void onStop() {
        super.onStop();
        ApplicationController.getHttpQueue().cancelAll("volleyget"); // 结束Activity时队列里面注销
         mQueue.cancelAll(this);  //取消这个队列里的所有请求:
    }

}

图片加载:

/****
 *
 * Volley之图片加载
 *
 * @author Administrator
 *
 */
public class VolleyImg extends Activity implements OnClickListener {

    ImageView imageview1,imageview2;
    NetworkImageView mNetworkImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_img);
        initView();

    }

    private void initView() {
        // TODO Auto-generated method stub
        findViewById(R.id.btn1).setOnClickListener(this);
        findViewById(R.id.btn2).setOnClickListener(this);
        findViewById(R.id.btn3).setOnClickListener(this);
        imageview1 = (ImageView) findViewById(R.id.img1);
        imageview2 = (ImageView) findViewById(R.id.img2);
        mNetworkImageView = (NetworkImageView) findViewById(R.id.networkImageView);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn1:
            img1();
            break;
        case R.id.btn2:
            img2();
            break;
        case R.id.btn3:
            img3();
            break;
        default:
            break;
        }

    }

    private void img1() {
        ImageRequest request = new ImageRequest("http://img.my.csdn.net/uploads/201407/26/1406383299_1976.jpg",
                new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap bitmap) {
                        imageview1.setImageBitmap(bitmap);
                    }
                }, 0, 0, Config.RGB_565,
                new Response.ErrorListener() {
                    public void onErrorResponse(VolleyError error) {
                        imageview1.setImageResource(R.drawable.ic_launcher);
                    }
                });
                VolleySingleton.getVolleySingleton(this.getApplicationContext()).addToRequestQueue(request);

    }

    public void img2() {
        com.android.volley.toolbox.ImageLoader mImageLoader;
        mImageLoader = VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
        //IMAGE_URL是图片网络地址
        //mImageView是ImageView实例
        //R.drawable.def_image默认图片id
        //R.drawable.err_image加载图片错误时的图片
        mImageLoader.get("http://hiphotos.baidu.com/baidu/pic/item/63d0f703918fa0ec2ebf584b269759ee3d6ddb7f.jpg",
        com.android.volley.toolbox.ImageLoader.getImageListener(imageview2,R.drawable.ic_launcher, R.drawable.ic_launcher));
    }

    /**
     * 使用NetworkImageView加载图片
     */
    public void img3()
    {
        com.android.volley.toolbox.ImageLoader mImageLoader;
        mImageLoader = VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
        mNetworkImageView.setImageUrl("http://hiphotos.baidu.com/baidu/pic/item/f603918fa0ec08fabf7a641659ee3d6d55fbda0d.jpg", mImageLoader);
    }    

}

记得AndroidManifest.xml 中加

<uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <application android:name="util.ApplicationController">

由于代码太多,布局文件未给出,要源码直接下载即可

源码下载:

Eclipse下载:http://download.csdn.net/detail/dickyqie/9631961

AndroidStudio下载:https://github.com/DickyQie/Volley

时间: 2024-10-14 07:37:31

原 Volley框架之网络请求和图片加载的相关文章

使用Volley框架中的ImageLoader来异步的加载图片

Volley框架在请求网络图片方面也做了很多工作,提供了好几种方法.本文介绍使用ImageLoader来进行网络图片的加载.ImageLoader的内部使用ImageRequest来实现,它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求.下面是ImageLoader加载图片的实现方法: 用一个类来编写图片加载和缓存的相关操作:例如:ImageWorkerManager 初始化全局图片缓存 private void init(Con

035 Android Volley框架进行网络请求

1.volley入门介绍 开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高. Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行

网络请求库和图片加载库

网络请求库 概述:所有网络库的原理是: 网络请求一般是基于HttpURLConnection和HttpClient进行封装的,也有自己编写Socket实现的,比如ion和OkHttp:请求的执行一般是通过线程池来管理,异步请求得到结果,则通过回调接口接收:并且一般接收结果的回调都通过Handler去在主线程执行 Ion的使用 详情查看Github主页https://github.com/koush/ion 介绍: 它支持网络请求和进行图片加载的双重功能 拥有链式api风格(Fluent API)

Android开发之搜芽项目的图片加载问题(使用Volley进行网络图片加载)

搜芽的移动开发这几天进度相对来说非常的快.但是美中不足的就是网络图片的加载问题.我有两套方案: 1)沿用迅雷动漫的图片加载.迅雷动漫也是用的一个开源的库.但是不知道是我使用出了问题还是真的是它的问题.在我迅速的下拉和回倒的时候, 不确定的会出现崩溃.logcat显示loadImage里面出现了内存溢出.out of memory..这个我想应该不是我的问题. 2)采用外包的AsyncImageLoader.这个文件我没有仔细看.然后实验结果是,加载图片巨慢.而且容易导致卡顿. 所以,我将希望转向

Android常用的图片加载库

 Android常用的图片加载库 前言:图片加载涉及到图片的缓存.图片的处理.图片的显示等.四种常用的图片加载框架,分别是Fresco.ImageLoader. Picasso. Glide. Universal Image Loader:ImageLoader是比较老的框架,一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛. ImageLoader开源库存哪些特征: 1.多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 2.支持随意的

Android的ImageLoader图片加载简单逻辑

1.以单例模式创建ImageLoader对象 2.初始化LruCache(最近最少使用算法的缓存工具类,http://www.cnblogs.com/tianzhijiexian/p/4248677.html),取可用内存的一部分用来存储图片 3.初始化DiskLruCache(硬盘缓存) 4.调用显示图片方法 如果使用资源ID,直接为ImageView设置图片 为ImageView设置tag为url Lrucache内存缓存取图片,如果有图片,设置图片,return 将图片加载请求加入图片加载

Volley与XUtils网络请求使用对比,心得,两者基本使用

之前一直使用的Volley作为网络请求框架,它是Google 在2013年的I/O大会 上,发布的.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮,同时扩展性很强.在用它之前我进行了简单的封装,因为Volley默认的请求线程生命周期伴随着Activity的周期,这有时并不能满足项目需要,so上代码: 1 <span style="font-size:14px;"><span style="font-size:14px;&qu

Volley框架使用之请求大量图片

安装说明参考openssl源码文件夹下INSTALL.W32 step1 环境搭建 安装perl,Visual Studio 2008 下载Openssl最新版源码.我下的版本为OpenSSL-1.0.0g. step2 启动Visual Studio 2008 Command Prompt 运行bin\vcvars32 设置 环境变量 注意: 如遇反馈"此处不应该有/Microsoft",参考错误1. step3 VS命令行窗口cd至openssl源码文件夹 执行以下命令 $perl

Google推荐——Glide使用详解(图片加载框架)

零.前言 本文所使用的Glide版本为3.7.0 一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所周知的简介就到此为止了)Glide 对于 Android SDK 的最低要求是 API level 10Glide滑行的意思,可以看出这个库的主旨就在于让图片加载变的流畅.现在被广泛使用,当然还是有很多开发者使用Square公司的picasso,也有