Volley(一)

来源:互联网 发布:写小说的网站 知乎 编辑:程序博客网 时间:2024/05/16 18:24

为什么使用Volley

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

    

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

例如,下面的代码片段,在AysncTaskdoBackground 里实现一个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项目

 可以通过两种方式集成

    生成Volley.jar,放到libs目录

    volley项目作为一个library依赖

git资源库Clone Volley项目:

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

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

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

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

  请求类型-GETPOSTPUTDELETE

  URL

  请求数据(HTTP Body

  成功响应监听

  错误监听


简单使用

 初始化RequestQueue


 JsonObjectRequest


StringRequest


GsonRequest

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



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




0 0
原创粉丝点击