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处理。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。