Volley框架--網絡請求(GET和POST請求的使用) -开发者知识库

Volley框架--網絡請求(GET和POST請求的使用) -开发者知识库,第1张

在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方法中撤銷請求任務即可,代碼如下:

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复