Volley框架--网络请求(GET和POST请求的使用)

在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 cache = new LruCache(
							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  void addToRequestQueue(Request req)
	{
		getRequestQueue().add(req);
	}

	public ImageLoader getImageLoader()
	{
		return mImageLoader;
	}

}

2、GET请求方式:

/**
	 * 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() {

			@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() {

			@Override
			public void onResponse(String response)
			{
				postEditText.setText(response);
			}
		}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error)
			{
				postEditText.setText("请求失败");
			}
		}){
			@Override
			protected Map getParams() throws AuthFailureError
			{
				Map map = new HashMap();
				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框架--网络请求(GET和POST请求的使用)_第1张图片
下一节我将介绍利用Volley框架进行图片加载和缓存,敬请大家关注。
项目下载地址:http://download.csdn.net/detail/u013043346/9315759

你可能感兴趣的:(Android)