在Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
在我们平常的开发中,我们经常需要使用到网络请求,这时候我们就需要一个健壮的框架保证项目的稳定,显然自己开发一个太浪费时间,不能保证开发效率,Volley将是一个很好的选择,下面我就介绍使用Volley框架进行网络请求的两种方式:
1、创建请求队列:
我们需要使用单例模式创建一个请求队列,代码很简单,我们直接上代码:
package com.example.test;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;
/***********************************************
** 创建人: 黎荣恒
** 日 期 : 2015年11月28日 下午5:32:49
** 描述 : 单例模式,创建请求队列
**
** 版 本 : 1.0 修改人: 日 期 : 修改记录:
************************************************/
public class VolleySingleton
{
public static VolleySingleton volleySingleton;
public RequestQueue mRequestQueue;// 请求队列
Context context;
ImageLoader mImageLoader;
public VolleySingleton(Context context)
{
this.context = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(
20);
@Override
public Bitmap getBitmap(String url)
{
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap)
{
cache.put(url, bitmap);
}
});
}
/**
* 获取请求队列
* @return
*/
public RequestQueue getRequestQueue()
{
if (mRequestQueue == null)
{
mRequestQueue = Volley.newRequestQueue(context.getApplicationContext());
}
return mRequestQueue;
}
public static synchronized VolleySingleton getVolleySingleton(
Context context)
{
if (volleySingleton == null)
{
volleySingleton = new VolleySingleton(context.getApplicationContext());
}
return volleySingleton;
}
//添加请求任务到请求队列中
public <T> void addToRequestQueue(Request<T> req)
{
getRequestQueue().add(req);
}
public ImageLoader getImageLoader()
{
return mImageLoader;
}
}
2、GET请求方式:
<pre name="code" class="java">/**
* get请求
*/
private void loadDataGet()
{
String url = "http://120.25.1.25/guangba/getIndoorMap.do?mallid=13&layer=1";
/**
* 第一个参数:请求方式
* 第二个参数:请求接口
* 第三个参数:请求成功回调
* 第四个参数:请求失败回调
* 第五个参数:请求参数
*/
StringRequest request = new StringRequest(Method.GET,url, new Listener<String>() {
@Override
public void onResponse(String response)
{
getEditText.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error)
{
getEditText.setText("请求失败");
}
});
request.setTag("111");//设置请求标签
VolleySingleton.getVolleySingleton(this.getApplicationContext()).addToRequestQueue(request);
}
3、post请求方式:
/**
* post请求
*/
private void loadDataPost()
{
String url = "http://120.25.1.25/guangba/getIndoorMap.do";
/**
* 第一个参数:请求方式
* 第二个参数:请求接口
* 第三个参数:请求成功回调
* 第四个参数:请求失败回调
* 第五个参数:请求参数
*/
StringRequest request = new StringRequest(Method.POST,url, new Listener<String>() {
@Override
public void onResponse(String response)
{
postEditText.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error)
{
postEditText.setText("请求失败");
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
Map<String,String> map = new HashMap<String, String>();
map.put("mallid", "13");
map.put("layer", "1");
return map;
}
};
request.setTag("222");//设置请求标签
VolleySingleton.getVolleySingleton(this.getApplicationContext()).addToRequestQueue(request);
}
4、Volley与Activity生命周期的联动
当应用退出时我们需要撤销请求任务,这个对于Volley来说也是很简单,因为Volley中提供一个与Activity生命周期联动的方法,只要重写Activity onStop方法,在onStop方法中撤销请求任务即可,代码如下:
@Override
protected void onStop()
{
// TODO Auto-generated method stub
super.onStop();
//让请求与Activity生命周期进行联动
VolleySingleton.getVolleySingleton(getApplicationContext())
.getRequestQueue().cancelAll("111");
VolleySingleton.getVolleySingleton(getApplicationContext())
.getRequestQueue().cancelAll("222");
}
下一节我将介绍利用Volley框架进行图片加载和缓存,敬请大家关注。
项目下载地址:http://download.youkuaiyun.com/detail/u013043346/9315759