zoukankan      html  css  js  c++  java
  • Volley(一)

    为什么使用Volley

            Android提供了两个HTTP库给开发者来进行实现一个HTTP请求,一个是AndroidHttpClient (从apache HttpClient拓展而来),另一个是HttpUrlConnection。两者都互有优缺点。当我们开发一个应用,一般来说,我们会写一些Http连接类,这些类可以处理所有Http请求,创建后台线程,管理线程池,解析response,缓存response,处理异常状态码、SSL连接,实现并行或者串行请求。每一个开发者都有自己的方式去实现这些方法。有些人可能会用AsycnTask在后台完成网络请求,有些人可能经过处理程序从UI线程创建HTTP连接类,然后在工作线程执行网络操作,再使用处理程序解析HTTP response返回主线程。 

          但是我们最终会重复编写相同的样板代码,我们试图在我们的应用程序重复造轮子。

          例如,下面的代码片段,在AysncTask的doBackground 里实现一个HTTP请求。当我们获取response,把数据从HttpUrlConnection的输入流拷贝到输出流,然后把输出流再转化成我们最终想要的JsonObject。所有这些样板代码在我们的代码中重复出现。

    HttpURLConnection urlConnection = null;
    try {
       URL url = new URL("http://www.android.com/");
       urlConnection = (HttpURLConnection) url.openConnection();
       InputStream in = new BufferedInputStream(urlConnection.getInputStream());
       ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
       byte[] buffer = new byte[1024]; // Adjust if you want
       int bytesRead;
       while ((bytesRead = in.read(buffer)) != -1) {
         outputStream.write(buffer, 0, bytesRead);
       }
       JSONObject resultJSON = new JSONObject(outputStream.toString());
    
    }catch (Exception e) {
           e.printStackTrace();
    } finally {
         urlConnection.disconnect();
    }

           所以谷歌提出volley,帮助开发人员处理相关的所有网络操作,这样开发人员可以集中精力实现HTTP响应后的业务逻辑。从而可以更少的网络代码调用,这样可以帮助开发者减少bug数量。

    注意Volley在大文件操作中并不很适用,如上传/下载,这些case,还需要使用原始的方法

    以下是Volley的一些关键特性:

        为Android提供更快的网络请求

        在后台线程中调度、并行实现所有HTTP请求并管理这些线程

        提供灵活的方法来同步并发运行你的网络请求

        带有内置的Json解析器

       可以设置请求的优先级

       为某些情况提供重试策略,如超时,内部服务器错误

       可以很灵活的取消请求

        提供图片的内存和磁盘缓存,批量处理下载

       可以很灵活的实现自己的缓存

       可以实现自己的HTTPStack(处理SSL连接,PATCH请求)

       请求可以跟踪调试

       可以和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)

    集成Volley项目

    从git资源库Clone Volley项目:

    git clone https://android.googlesource.com/platform/frameworks/volley

     可以通过两种方式集成

        生成Volley.jar,放到libs目录

        把volley项目作为一个library依赖

    使用Volley主要涉及连个类RequestQueue 和Request

    RequestQueue ---调度请求队列并在工作线程执行请求,然后响应给主线程

    Request---所有的网络请求都可以通过此类来创建,它提供了一个HTTP请求所需的主要参数,譬如:

       请求类型-GET,POST,PUT,DELETE

       URL

       请求数据(HTTP Body)

       成功响应监听

       错误监听

    简单使用

     初始化RequestQueue

     JsonObjectRequest


    StringRequest

    GsonRequest

     当然你也可以自定义Request,使得其可以返回对应的Java类型。譬如,我们可以用Gson来自定义一个Request。


    使用的时候和StringRequest和JsonObjectRequest差不多

  • 相关阅读:
    VMware 8安装Mac OS X 10.7 Lion正式版
    linq to sql sum
    拍照,去相册剪切图片
    Binding for WPF Styles
    JDK1.8简单配置环境变量两步曲
    hibernate系列之四
    idea中使用逆向工程三部曲
    hibernate系列之一
    hibernate系列之二
    《JSON笔记之二》封装JSONUtil
  • 原文地址:https://www.cnblogs.com/adison/p/3868469.html
Copyright © 2011-2022 走看看