首页 > 代码库 > Android下网络请求的两个封装类

Android下网络请求的两个封装类

1、背景介绍

        我们在Activity和Fragment中做网络请求的时候,往往用到线程和handler消息处理机制等做处理。这里,我们将网络请求,一个get和一个post请求,使用线程封装一下。这样就剥离开了Activity中的代码量,将复杂的代码,封装在不同的类中,实现一个类的单一原则。


2、GET请求封装

/**
 * GET提交的网络请求<br>
 * <br>
 * 传递过来主UI线程的消息处理器,经过线程处理之后,返回一个消息给主UI线程 <br>
 * 在返回的msg信息中,what封装了返回的状态码信息 <br>
 * 1001代表成功,404代表客户端请求错误,100代表IO处理错误 <br>
 * <br>
 * obj信息封装了请求的结果,返回值为String类型
 * 
 * @author ljtyzhr
 * 
 */
public class HttpGetThread implements Runnable {

	/** handler处理 */
	private Handler handler;
	/** 网络请求地址 */
	private String url;

	/**
	 * 使用Get提交的构造方法
	 * 
	 * @param handler
	 *            消息对象
	 * @param url
	 *            请求的url地址
	 */
	public HttpGetThread(Handler handler, String url) {
		this.handler = handler;
		this.url = url;
	}

	@Override
	public void run() {
		// 获取我们回调主ui的message
		Message msg = handler.obtainMessage();
		try {
			String result = HttpRequestUtils.doGet(url);
			msg.what = ConstantValues.GET_NET_SUCCEED;
			msg.obj = result;
		} catch (ClientProtocolException e) {
			msg.what = 404;
		} catch (IOException e) {
			msg.what = 100;
		}
		// 给主ui发送消息传递数据
		handler.sendMessage(msg);
	}
}

3、POST请求封装

/**
 * POST提交的网络请求<br>
 * <br>
 * 传递过来主UI线程的消息处理器,经过线程处理之后,返回一个消息给主UI线程 <br>
 * 在返回的msg信息中,what封装了返回的状态码信息 <br>
 * 1001代表成功,404代表客户端请求错误,100代表IO处理错误 <br>
 * <br>
 * obj信息封装了请求的结果,返回值为String类型
 * 
 * @author ljtyzhr
 * 
 */
public class HttpPostThread implements Runnable {

	/** handler处理 */
	private Handler handler;
	/** 网络请求地址 */
	private String url;

	/**
	 * 使用post提交的构造方法
	 * 
	 * @param handler
	 *            消息对象
	 * @param url
	 *            请求的url地址
	 */
	public HttpPostThread(Handler handler, String url) {
		this.handler = handler;
		this.url = url;
	}

	@Override
	public void run() {
		// 获取我们回调主ui的message
		Message msg = handler.obtainMessage();
		try {
			String result = HttpRequestUtils.doPost(url);
			msg.what = ConstantValues.GET_NET_SUCCEED;
			msg.obj = result;
		} catch (ClientProtocolException e) {
			msg.what = 404;
		} catch (IOException e) {
			msg.what = 100;
		}
		// 给主ui发送消息传递数据
		handler.sendMessage(msg);
	}
}

4、使用方式

       看到上面的参数信息,我们大致知道需要一些怎样的参数,这里简单介绍如何使用这两个封装类:

给出一个Get请求的实例:

HttpGetThread httpGetThread = new HttpGetThread(handler, url, this);
new Thread(httpGetThread).start();

handler的处理机制:

private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case ConstantValues.GET_NET_SUCCEED:
				// 获取网络成功
				jsonString = (String) msg.obj;
				break;
			case ConstantValues.GET_NET_FAILED:
				// 获取网络失败
				break;
			case ConstantValues.DEL_RESULT_SUCCEED:
				// 数据处理成功了,开始设置数据
				break;
			case ConstantValues.DEL_RESULT_FAILED:
				// 字符串处理失败
				theUrlErrorShow();
				break;
			case ConstantValues.THE_URL_ERROR:
				// 字符串处理失败
				Logger.ii(TAG, "The url error!");
				break;
			default:
				break;
			}
		}
	};

5、总结

       在使用上面的网络请求封装类的时候,要注意两个问题:

第一、我们使用的网络请求中,需要传递当前的handler处理对象,用于接收我们的消息处理返回信息;内部的网络请求,get和post请求,这里不再赘述;

第二、我们使用的这个框架中,没有使用到Cookie处理机制,那么当我们做需要登录的请求的时候,需要使用Cookie处理。

Android下网络请求的两个封装类