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

本文介绍了Android开发中使用的Volley网络通信库,重点讲解如何创建请求队列,执行GET和POST请求,并探讨了Volley与Activity生命周期的联动,以确保网络请求的稳定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值