Android网络通信必备神器Volley详解——初识Volley

简介

Volley是Google开发和维护的一个网络通信开源库,具有方便、并发、快速的特点。但是Volley并不适合大文件下载或者流操作,因为在解析数据的时候Volley是把所有的response都放在内存里的。对于大文件下载可以用DownloadManager。

下载Volley

使用git下载
git clone https://android.googlesource.com/platform/frameworks/volley

发送一个简单的Request

RequestQueue

RequestQueue是用来管理网络通信中的线程,读写缓存,解析response的。Volley提供了一个方法Volley.newRequestQueue来设置RequestQueue。
下面用一个例子来讲解一下
volleyResquestBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Instantiate the RequestQueue
                RequestQueue queue = Volley.newRequestQueue(getApplication());
                String url = "http://www.baidu.com";

                StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        Toast.makeText(getApplicationContext(), "Response is:" + s.substring(0, 50),Toast.LENGTH_LONG).show();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        Toast.makeText(getApplicationContext(),"That didn't work!",Toast.LENGTH_LONG).show();
                    }
                });

                // Add the request to RequestQueue.
                queue.add(stringRequest);
            }
        });

向百度的主页发送一个GET请求并把前50个字符显示出来。

实现流程

1. 使用Volley.newRequestQueue(this)初始化RequeQueu
2. new一个StringRequest,并且重写onResponse和ErrorListener方法
3. queue.add(stringRequest)把stringRequest加入队列

Volley 的返回数据Response都是返回在主线程的,所以可以根据返回的数据直接控制UI 

Request生命周期

Android网络通信必备神器Volley详解——初识Volley_第1张图片

取消Request

如果在Activity中启动了网络请求,但是在请求还没结束的时候Activity就结束了,除了浪费资源意外还有可能造成crash。所以在Activity结束的时候就要取消所有的Request。可以使用Tag的方法在onStop()中取消Request。

public static final String TAG = "Spark"
StringRequest stringRequest; // Assume this exists.
RequestQueue mRequestQueue;  // Assume this exists.

// Set the tag on the request.
stringRequest.setTag(TAG);

// Add the request to the RequestQueue.
mRequestQueue.add(stringRequest);

在Activity的onStop()方法中
@Override
protected void onStop () {
    super.onStop();
    if (mRequestQueue != null) {
        mRequestQueue.cancelAll(TAG);
    }
}




你可能感兴趣的:(android,并发,开源,网络通信,Volley)