Android网络请求库

背景:    我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。    不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。

Volley

    在volley之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于 AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的 Google I/O 2013上,Volley 发布了。Volley 是 Android 平台上的网络通信库,能使网络通信更快,更简单,更健壮。适合于数据量不大,但通信频繁。(流星的例子)不适合进行大数据和流媒体的网络请求,如下载,上传大文件或视频一类的。

      Volley各种Request的使用方法,包括StringRequest、JsonRequest、ImageRequest等。其中StringRequest用于请求一条普通的文本数据,JsonRequest(JsonObjectRequest、JsonArrayRequest)用于请求一条JSON格式的数据,ImageRequest则是用于请求网络上的一张图片。

 volley提供的功能:
1.Get Post 异步加载网络图像
2.可以对网络请求进行排序优先级管理
3.网络请求的缓存
4.多级别取消请求
5.Activity结束的同时取消所有的网络请求。

通过Volley实现Json字符串请求  

一个最基本的HTTP发送与响应的功能,要就是进行了以下三步操作:

1. 创建一个RequestQueue对象。

2. 创建一个Request对象。(StringRequest JsonObjectRequest)

3. 将StringRequest对象添加到RequestQueue里面。

HTTP的请求类型通常有两种,GET和POST

StringRequest来说:

StringRequest stringRequest = new StringRequest(Method.GET, url,  listener, errorListener); 


StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener);

JsonObjectRequest来说

类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。服务器返回给我们的数据是JSON格式的,并且onResponse()方法中携带的参数也正是一个JSONObject对象,之后只需要从JSONObject对象取出我们想要得到的那部分数据就可以了

代码如下:

    //获取json字符串
    public void getJSONVolley(){
        //用来获取volley的请求对象
        RequestQueue requestQueue= Volley.newRequestQueue(this);
        //创建一个请求地址
        String JSONDateUrl="http://115.159.123.41:8001/zhihu?date=21";
        //实例化 四个参数 1.请求方式 2.请求地址 3.监听事件4.错误的监听事件
        JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, JSONDateUrl,
                null, new Response.Listener
   
   
    
    () {
            @Override
            public void onResponse(JSONObject response) {
                //用来接收我们接下来需要的数据
               tv.setText(response.toString());


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                System.out.print("对不起 有问题");
            }
        });
        //添加请求
          requestQueue.add(jsonObjectRequest);

    }
   
   

通过Volley异步加载图片

1.ImageRequest的用法

1.首先获取一个RequestQueue队列
2.new出一个ImageRequest对象 6个参数
3.最后将这个ImageRequest对象添加到RequestQueue里就可以了

2.ImageLoader的用法

而ImageLoader就是一个很好的例子。ImageLoader也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。

由于ImageLoader已经不是继承自Request的了,所以它的用法也和我们之前学到的内容有所不同,总结起来大致可以分为以下四步:

1. 创建一个RequestQueue对象。

2. 创建一个ImageLoader对象。

3. 获取一个ImageListener对象。

4. 调用ImageLoader的get()方法加载网络上的图片。


    // //对比异步加载图片的优点 当父类控件dispacher的时候 就会自动取消掉网络请求 不用担心生命周期的问题
    public  void NetWorkImageViewVolley(){
        String imageurl="http://pic4.zhimg.com/e594fb206c8dccdedb506f018997606f.jpg";
        //创建请求对象
        RequestQueue requestQueue=Volley.newRequestQueue(this);
        final LruCache
       
       
        
         lruCache=new LruCache<>(20);
        ImageLoader.ImageCache imageCache=new ImageLoader.ImageCache(){

            @Override
            public Bitmap getBitmap(String s) {

                return lruCache.get(s);
            }

            @Override
            public void putBitmap(String s, Bitmap bitmap) {
            lruCache.put(s,bitmap);
            }
        };
        //加载
        ImageLoader imageLoader=new ImageLoader(requestQueue,imageCache);

        iv2.setTag("url");
        iv2.setImageUrl(imageurl,imageLoader);
    }
empty
       
       

3.NetworkImageView的用法

NetworkImageView是一个自定义控制,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能。NetworkImageView控件的用法要比前两种方式更加简单,大致可以分为以下五步:

1. 创建一个RequestQueue对象。

2. 创建一个ImageLoader对象。

3. 在布局文件中添加一个NetworkImageView控件。

4. 在代码中获取该控件的实例。

5. 设置要加载的图片地址。

 //使用 Volley 提供的 NetWorkImageView 完成图片的加载,
    // //对比异步加载图片的优点 当父类控件dispacher的时候 就会自动取消掉网络请求 不用担心生命周期的问题
    public  void NetWorkImageViewVolley(){
        String imageurl="http://pic4.zhimg.com/e594fb206c8dccdedb506f018997606f.jpg";
        //创建请求对象
        RequestQueue requestQueue=Volley.newRequestQueue(this);
        final LruCache
               
               
                
                 lruCache=new LruCache<>(20);
        ImageLoader.ImageCache imageCache=new ImageLoader.ImageCache(){

            @Override
            public Bitmap getBitmap(String s) {

                return lruCache.get(s);
            }

            @Override
            public void putBitmap(String s, Bitmap bitmap) {
            lruCache.put(s,bitmap);
            }
        };
        //加载
        ImageLoader imageLoader=new ImageLoader(requestQueue,imageCache);

        iv2.setTag("url");
        iv2.setImageUrl(imageurl,imageLoader);
    }
               
               


自定义GsonRequest


JsonRequest的数据解析是利用Android本身自带的JSONObject和JSONArray来实现的,配合使用JSONObject和JSONArray就可以解析出任意格式的JSON数据。不过也许你会觉得使用JSONObject还是太麻烦了,还有很多方法可以让JSON数据解析变得更加简单,比如说GSON。遗憾的是,Volley中默认并不支持使用自家的GSON来解析数据,不过没有关系,通过上面的学习,相信你已经知道了自定义一个Request是多么的简单,那么下面我们就来举一反三一下,自定义一个GsonRequest。


首先我们需要把gson的jar包添加到项目当中,jar包的下载地址是:https://code.google.com/p/google-gson/downloads/list 。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值