当前位置: 代码迷 >> Android >> 搞明白android 网络库之Volley
  详细解决方案

搞明白android 网络库之Volley

热度:23   发布时间:2016-04-28 03:14:39.0
弄明白android 网络库之Volley

1Volley是什么?

VolleyGoogle官方在2013 Android IO大会上推出的新网络通信框架,

一个使得android网络通信更加容易并且迅速的HTTP库。它并且可以通过开放的AOSP仓库进行使用。

它有以下特性:

1)自动调度网络请求;

2)支持多并发的网络连接;

3)磁盘和内存响应缓存使用标准HTTP缓存特性;

4)支持请求优先级;

5)取消请求API。你可以取消一个请求,或者你可以设定块或取消的请求范围;

6)易于定制,例如,重试和补偿;

7)强大的排序,便于正确填充UI的从网络获取而来的异步数据;

8)有调试和跟踪工具

 

它就是一个让你更快捷更高效进行网络通信的android网络工具库,它适用于小数据的交换。对于大文件或者流媒体,它是不适合的。而对于大文件的下载操作,请考虑用其他的库,比如DownloadManager。

 

Volley is notsuitable for large download or streaming operations, since Volley holds allresponses in memory during parsing. For large download operations, considerusing an alternative like DownloadManager.

 

如果你安装有git,那么可以通过下面命令来获得 Volley的源码:

git clonehttps://android.googlesource.com/platform/frameworks/volley

 

二、如何使用Volley?

1、使用Volley发送一个简单的请求:

Volley提供了一个方法来根据一个URL发起一个HTTP请求。只需要做以下5个步骤:

 

1)下载volley.jar包,并加入到android工程的libs中;

2)配置上网的权限;

 <uses-permission android:name="android.permission.INTERNET" >


3)通过Volley的静态方法新建一个请求队列对象RequestQueue,这里解释下什么是RequestQueue,从它的源码可以大概了解到它是拥有好几个queue成员变量的对象,其中包括缓存队列和网络队列,都是采用优先级阻塞队列。因此,我们可以理解它为一个用来处理我们所提出所有网络请求的队列。

    1. /** The cache triage queue. */
    1. privatefinalPriorityBlockingQueue<Request<?>> mCacheQueue =
    2. newPriorityBlockingQueue<Request<?>>();
    1. /** The queue of requests that are actually going out to the network. */
    1. privatefinalPriorityBlockingQueue<Request<?>> mNetworkQueue =
    2. newPriorityBlockingQueue<Request<?>>();

     

    来自 <https://android.googlesource.com/platform/frameworks/volley/+/1a39583f0ee06329f7918ed9a4c7d0e7cd342917/src/main/java/com/android/volley/RequestQueue.java>

     

 

RequestQueue queue = Volley.newRequestQueue(this);

4)提供一个URLnew一个StringRequest 对象;所谓StringRequest对象,在它源码注释可知,它就一个是利用给定的URL作为一个String去检索响应内容的封装请求对象。

    1. /**
    2. * A canned request for retrieving the response body at a given URL as a String.
    3. */
    1. publicclassStringRequestextendsRequest<String>{
    2. privatefinalListener<String> mListener;
    1. /**
    2. * Creates a new request with the given method.
    3. *
    4. * @param method the request [email protected] Method} to use
    5. * @param url URL to fetch the string at
    6. * @param listener Listener to receive the String response
    7. * @param errorListener Error listener, or null to ignore errors
    8. */
    1. publicStringRequest(int method,String url,Listener<String> listener,
    1. ErrorListener errorListener){
    1. super(method, url, errorListener);
    1. mListener= listener;
    1. }

     

    来自 <https://android.googlesource.com/platform/frameworks/volley/+/1a39583f0ee06329f7918ed9a4c7d0e7cd342917/src/main/java/com/android/volley/toolbox/StringRequest.java>

     

5)并把它加入到RequestQueue队列中。

queue.add(stringRequest);

 

官方所给出的提示DEMO如下:

final TextView mTextView = (TextView) findViewById(R.id.text);

...

 

// Instantiate the RequestQueue.

RequestQueue queue = Volley.newRequestQueue(this);

String url ="http://www.google.com";

 

// Request a string response from the provided URL.

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,

         new Response.Listener() {

   @Override

   public void onResponse(String response) {

      // Display the first 500 characters of the response string.

      mTextView.setText("Response is: "+ response.substring(0,500));

   }

}, new Response.ErrorListener() {

   @Override

   public void onErrorResponse(VolleyError error) {

      mTextView.setText("That didn't work!");

   }

});

// Add the request to the RequestQueue.

queue.add(stringRequest);

 

来自 <http://developer.android.com/training/volley/simple.html>

 

 

2、使用JSON传递数据:JsonRequest

(未完待续)

  相关解决方案