联网框架--->volley初步了解

来源:互联网 发布:淘宝没有3c会怎么样 编辑:程序博客网 时间:2024/05/22 03:12

原文来自 首先声明一下我是一名菜鸟,为了提高自己学习写博客,这是我的第一篇博客.
说到联网请求数据,大家一定会想到 HttpURLConnection和HttpClient,但是他们用起来比较复杂,需要进行很多,封装, 同时还要尽心缓存的处理,对于我来说比较麻烦, 当然,也有很多框架,使用起来非常的简单AsyncHttpClient,Xutils,afinal等等,比较的方便,今天跟大家介绍一下volley这个框架的用法.(Volley是Ficus Kirpatrick在Gooogle I/O 2013发布的一个处理和缓存网络请求的库,能使网络通信更快,更简单,更健壮,支持多线程 异步网络连接框架。)
注: volley 高并发的数据访问, 访问数据量不大,但是频繁,对于下载文件并不是他的长项,如果大家想要下载文件,推荐使用*android-downloader这个框架*
volley框架链接
废话不多说先讲讲用法
主要就是进行了以下三步操作:
1. .创建一个请求队列RequestQueue对象
2.创建一个请求对象StringRequest,JsonObjectRequest..
3.将请求对象添加到队列中

发生了一个小意外,eclipse卡死,关掉后打不开org.eclipse.swt.SWTException: Failed to execute runnable
解决办法:
删除文件 workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi
看代码:(url地址复制别人)

mRequestQueue = Volley.newRequestQueue(getApplicationContext());        String url= "https://www.baidu.com/index.php?tn=monline_5_dg";        JsonObjectRequest mJsonObjectRequest = new JsonObjectRequest(Method.GET, url, null, new Response.Listener<JSONObject>() {            @Override            public void onResponse(JSONObject response) {                //请求成功的数据                Log.i(TAG, response.toString());            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                //请求失败                Log.i(TAG, error.getMessage());            }        }){            @Override            protected Map<String, String> getParams() throws AuthFailureError {                //添加参数//是这地方导包要注意                return super.getParams();            }        };        mRequestQueue.add(mJsonObjectRequest);

就这样一个post请求就发送出去了可以一看到请求回来的数据:
可以看到返回结果是一个字符串

图片的加载

android开发中,是不是常常会碰到大量图片的加载,还要处理图片的缓存十分的麻烦,volley框架就可以很好的解决这个问题:
1. ImageRequest的用法
使用可上面的差不多我就写代码了:

mImageRequest = new ImageRequest("http://tupian.enterdesk.com/2012/0621/gha/10/www.enterdesk.comq3.jpg.680.510.jpg",                 new Response.Listener<Bitmap>() {                    @Override                    public void onResponse(Bitmap response) {                        iv_volley.setImageBitmap(response);                    }                }, 0, 0, Config.RGB_565, new Response.ErrorListener() {                    @Override                    public void onErrorResponse(VolleyError error) {                        //请求失败                        Log.i(TAG, error.getMessage());                    }                });        mRequestQueue.add(mImageRequest);

结果:
这里写图片描述

就是有这么简单 ,但是我们不能就这么满足,volley还为我们提供了一种加载图片的方法
2. ImageLoader的用法(个人非常喜欢这种)
先获取一个imageloader对象

ImageLoader mImageLoader = new ImageLoader(mRequestQueue, new ImageCache() {            @Override            public void putBitmap(String url, Bitmap bitmap) {                // TODO Auto-generated method stub            }            @Override            public Bitmap getBitmap(String url) {                // TODO Auto-generated method stub                return null;            }        });

关于这个imagecahe,后面再介绍
第二步:需要一个imageListener对象
view, defaultImageResId, errorImageResId

ImageListener imageListener = mImageLoader.getImageListener(iv_volley, R.drawable.ic_launcher, R.drawable.ic_launcher); 

三个参数: view 显示加载图片的空间 defaultImageResId 没有加载成功时的图片,errorImageResId加载错误时的图片
第三步:

mImageLoader.get("http://tupian.enterdesk.com/2012/0621/gha/10/www.enterdesk.comq3.jpg.680.510.jpg", imageListener);        mImageLoader.get("http://tupian.enterdesk.com/2012/0621/gha/10/www.enterdesk.comq3.jpg.680.510.jpg", imageListener, 0, 0);

介绍两种形式:第二种可以限制图片的大小,
maxWidth The maximum width of the returned image.
maxHeight The maximum height of the returned image.

关于imagecahe

    private class MyImageCache implements ImageCache{        private LruCache<String, Bitmap> mCache;         public MyImageCache(){             int maxSize = 8 * 1024 * 1024;              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);          }    }

maxSize 设置图片缓存的大小
LruCache:这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。(v4包)
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
其实我了解的也并不多,大家还可以继承Request对象,定义适合自己的 request对象
就到这里吧,欢迎大家批评,指正,交流 qq: 646095837

0 0