欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

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

来源: 开发者 投稿于  被查看 37699 次 评论:243

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


1、背景介绍

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


2、GET请求封装

/**
 * GET提交的网络请求
*
* 传递过来主UI线程的消息处理器,经过线程处理之后,返回一个消息给主UI线程
* 在返回的msg信息中,what封装了返回的状态码信息
* 1001代表成功,404代表客户端请求错误,100代表IO处理错误
*
* 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提交的网络请求
*
* 传递过来主UI线程的消息处理器,经过线程处理之后,返回一个消息给主UI线程
* 在返回的msg信息中,what封装了返回的状态码信息
* 1001代表成功,404代表客户端请求错误,100代表IO处理错误
*
* 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处理。

用户评论