当前位置:阳光沙滩 >Android > 查看文章
阿里云优惠码

1.android中google推出的网络通信库:volley

在这之前呢,我们在进行网络请求的时候,多数使用AsyncTask、 HttpClient 、HttpURLConnection…这些封装性不够好,不够统一。每个人在写的时候,只要获取到数据就行了,所以阅读性比较差咯。

今天的主角呢是这个:Volley(如果有兴趣的话可以去把源码看一次哦,能看懂的。OkHttp就稍微比较难点)

Volley是谷歌在2013年的IO大会推出的一个网络通信框架,它简单,速度快。

1.1.volley的介绍

其实上面也算是一小部分的介绍了,对于技术,我们当然要知道它有什么用吧!

Volley呢它用來请求数据:

1、Json、图片。当然这是异步请求

2、可以对网络请求进行排序

3、可以对网络请求进行优先级处理

4、缓存数据

5、多个级别的取消请求

6、与Activity的生命周期绑定,这个可以防止内存泄露哦!

其中第3、4点对于ListView來说,太好了。因为我们有时候滑动得很快,那么看不到的那些就不需要请求了。

1.2.volley的使用

如何使用volley呢?在安卓开发中,现在传输数据绝大多数使用Json,而XML,基本没上没见了。

jar包在这里:

Volley jar包下载
http://bbs.sunofbeaches.com/thread-4045-1-1.html
(出处: 阳光沙滩)

ps:养成良好的习惯:需要什么权限先添加哦,这里网络访问的话,需要网络权限,在配置文件里添加吧!

1.2.1.1、使用Volley來请求Json数据

其实,Volley的数据请求步骤都很相似:

1、通过Volley获取到请求对队

2、创建json对象请求实例

3、把这个请求添加到请求队列里

代码如下:

public void getJsonFromNet() {
        //获取到队列
        RequestQueue queue = Volley.newRequestQueue(this);
        
        //数据URL
        String url = "http://bbs.sunofbeaches.com/test_data/json.json";
        
        //创建Json对象请求实例
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject jsonObject) {
                        Log.d("message", jsonObject + "");
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        Log.d("message", "请求数据失败" + volleyError);

                    }
                });
        //把请求实例添加到队列中
        queue.add(request);
    }

结果如下:

message: {"jiangxi":[{"capital":"Nanchang","name":"Jiangxi"}],"guangdong":[{"capital":"Guangzhou","name":"Guangdong"}],"guangxi":[{"capital":"Nanning","name":"Guangxi"}]}

 

1.2.2.2、使用Volley來请求图片

直接上代码吧,在代码里也有解释了,嘻嘻!

public void getPicFromNet() {

        //图片的URL
        String url = "http://bbs.sunofbeaches.com/template/dreambred_c_apple/images//logo.png";
        //创建队列
        RequestQueue queue = Volley.newRequestQueue(this);

        //缓存对象
        final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(30);// 最大缓存数量

        //图片缓存
        ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {

            //从缓存中获取到图片
            @Override
            public Bitmap getBitmap(String s) {
                return cache.get(s);
            }

            //添加图片到缓存里
            @Override
            public void putBitmap(String s, Bitmap bitmap) {
                cache.put(s, bitmap);
            }
        };

        //把图片加载到控件上
        ImageLoader loader = new ImageLoader(queue, imageCache);
        //监听
        /**
         * mPicContainer:图片容器,也就是view,这里是ImageView,
         * R.mipmap.ic_launcher : 默认图片,
         * R.mipmap.ic_launche :加载错误的图片。
         */
        ImageLoader.ImageListener listener = loader.getImageListener(mPicContainer, R.mipmap.ic_launcher, R.mipmap.ic_launcher);

        // 加载图片
        loader.get(url, listener);
        //此处应有掌声
    }

执行结果是这样子的:

2015-12-13_223752

7K
为您推荐
各种观点