Volley 的介绍和使用(一)

来源:互联网 发布:网络教育考公务员 编辑:程序博客网 时间:2024/05/22 10:47

Volley 介绍

Volley是在Google I/O 2013发布的一款网络请求框架,主要用于小数据量的网络请求,包括图片的异步加载和缓存功能。在开发中可以很好的帮助开发者进行网络操作,并且更加高效。

Volley的英文意为“齐射”,在发布Volley时Goole的配图就是一副射箭的图,可以看出来,齐射的箭支并不太多,这说明,它特别适合数据量不是太大的网络请求。在手机端一般没有太大的请求量,所以Volley特别适合Android开发使用。

Volley的优点

  • 自动调度网络请求(Automatic scheduling of network requests.)
  • 高并发的网络连接(Multiple concurrent network connections.)
  • 使用标准的HTTP cache coherence响应透明磁盘和内存缓存。(Transparent disk and memory response caching with standard HTTP cache coherence.)
  • 支持设定请求优先级(Support for request prioritization.)
  • 请求可取消。你可以取消单一请求,或者设置取消请求队列的某一块后者某个区域。(Cancellation request API. You can cancel a single request, or you can set blocks or scopes of requests to cancel.)
  • 可扩展性,例如:请求重试和回退。(Ease of customization, for example, for retry and backoff.)
  • 强制排序,让你可以更简单的异步的获取网络数据,并且将数据显示在UI界面上。(Strong ordering that makes it easy to correctly populate your UI with data fetched asynchronously from the network.)
  • 测试跟踪工具(Debugging and tracing tools.)

Volley擅长于通过RPC(Remote Procedure Call Protocol)类型的操作来填充UI,例如抓取页面的搜索数据作为结构数据,它可以与任何协议结合,并且支持 String,JSON,图片,Volley内置模板代码,这样你就可以专心处理app的逻辑。

Volley不适合大数量的下载或者流操作,因为Volley一直持有着所有的连接。对于大型下载操作,建议使用DownloadManager,或者别的框架,例如OKHttp等。

Volley 的下载

Volley的源码在AOSP仓库中,具体位置在frameworks/volley下,里面包含主要的请求调度管道,在toolbox包下也有一套常用的实用工具。将Volley集成到你的项目里,最简单的方式是用Git把源码clone下来,把源码设置成依赖库。

1.使用下面的Git命令从仓库中clone代码

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

2.将下载的源码作为一个module导入到你的项目中,也可以打成一个jar包

在使用git clone Volley 源码的时候,会遇到以下情况

$ git clone https://android.googlesource.com/platform/frameworks/volleyCloning into 'volley'...fatal: unable to access 'https://android.googlesource.com/platform/frameworks/volley/': Failed to connect to android.googlesource.com port 443: Timed out

没错你猜的没错,就是被墙了,就算用了翻墙软件,开启全局模式也无济于事;当然也不是没有办法,可以设置一下 git 代理,命令如下:

$ git config --global http.proxy "localhost:1080"

运行之后,马上试试,看是不是像下面一样OK

$ git clone https://android.googlesource.com/platform/frameworks/volleyCloning into 'volley'...remote: Counting objects: 135, doneremote: Finding sources: 100% (135/135)remote: Total 3193 (delta 302), reused 3193 (delta 302)Receiving objects: 100% (3193/3193), 1.22 MiB | 39.00 KiB/s, done.Resolving deltas: 100% (302/302), done.Checking connectivity... done.

但是,设置完毕代理之后,最好恢复一下,否则可能影响Git的使用

git config --global --unset http.proxy

Volley 的简单使用

我们在使用Volley时,首先会创建一个RequestQueue,然后会传递一个Request对象给它;RequestQueue用来管理网络操作线程,读取和写入缓存,解析返回数据。请求对象解析完返回数据后,Volley会将解析的返回结果交给主线程。下图是一个请求的生命周期:

该示例使用的是Android Studio 1.5.1

一. 将Volley导入项目中,有两种方式
.

1. File->New->Import->选择Volley->Finish; 2. 将Volley拷贝到你的项目的同级目录下,修改setting.gradle,在第一行的末尾添加括号中的内容 (,':volley'),然后点击右上角的`Sync Now`,然后稍等一会等Build完毕就OK了。3. 当build成功之后,Volley文件夹右下角会有一个类似书架图像。4. 打开你项目的`build.gradle`文件在 `dependencies`下面添加括号中的内容 (compile project(':volley')),然后点击右上角的`Sync Now`,等待build完毕就Ok了。5. 或者右击不得项目根目录->Open Model Setting->在弹出的窗口的右上侧点击 Dependencies ->点击右侧绿色的加号->Module Dependency->选择Volley -> OK

二. 在AndroidManifest.xml的manifest节点下添加网络请求的权限

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

三. Volley 提供了一个方便的方法Volley.newRequestQueue来获取一个RequestQueue对象。使用默认的设置来开始请求队列。

public class VolleyStringRequestActivity extends AppCompatActivity {    public static final String mUrlStr = "https://www.baidu.com/";    TextView mTextView = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_volley_string_request);        mTextView = (TextView) findViewById(R.id.textView);        requestUseVolley();    }    private void requestUseVolley() {        //1.获取一个RequestQueue        RequestQueue queue = Volley.newRequestQueue(this);        //2.创建一个请求,其返回的结果以String 形式返回        StringRequest stringRequest = new StringRequest(Request.Method.GET, mUrlStr, new Response.Listener<String>() {            @Override            public void onResponse(String response) {//请求成功返回的回调            //将返回的数据显示到TextView上            mTextView.setText(response);            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {//请求失败返回的回调                mTextView.setText(error.getMessage());            }        });        //3.将请求添加的请求队列中,在这里请求就已经开始了        queue.add(stringRequest);    }}

除了返回String的请求,相应的还有JsonObjectRequest、JsonArrayRequst和ImageRequst,用来返回JSONObject、JSONArray和Bitmap ;用法跟StringRequst 类似。这里就不赘述了,下节再具体讨论。

上面的例子还是有些问题的,在下一节会继续讲解

0 0
原创粉丝点击