简介
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生命周期
取消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);
}
}