
调用端只要创建Request对象,设置参数,发起请求,即可。最后结果通过回调函数返回。右边的异步任务,HttpClient创建,参数解析,错误处理全部交给网络处理模块来完成。由此来看,这个网络模块其实是重复性很高的开发工作,为了避免重复造轮子,下面就给大家介绍下我们工作中实现的网络操作模块及相应类的实现。
1.调用端代码:
Get或Post请求
protected void doWebTest() {String url = "http://www.target.com/abcd";try { MyHttpRequest http = new MyHttpRequest(url); //如果是Post请求,则设置.如果是get请求,请不要设置post参数 //http.addPost("data", "testpostvalue"); //post参数结束,get请求,不要添加上面addPost代码 http.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); http.addHeader("Accept-Encoding", "gzip, deflate, sdch"); http.addHeader("Accept-Language","zh-CN,zh;q=0.8"); http.addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36"); http.StartRequest(new INetResponseListener() {@Overridepublic void OnRequestComplete(NetResponse result) { if(result.isSuccess()) {String resultStr = result.resultStr;//resultStr就是网络返回的数据 }else {Exception ee = result.getException(); }} });} catch (Exception e) { e.printStackTrace();} }以上是调用端需要实现的源码,是不是很少代码就可以完成网络请求?下面就为大家揭开这个网络处理类的面纱。
2.1 AbstractRequester
抽象的网络管理类,类定义如下:
public abstract class AbstractRequester extends AsyncTask<HttpRequestData,Integer,NetResponse> { ... /*** 根据需求创建传递给http发送的参数* @return*/ abstract HttpRequestData createData(); /*** 根据返回的流,解析生成相应的对象* @param in* @return*/ abstract NetResponse parseResponse(InputStream in); //执行完成后的回调函数protected void onPostExecute(NetResponse result) {super.onPostExecute(result);if(listener!=null){ listener.OnRequestComplete(result);} } //网络请求开始处理 protected NetResponse doInBackground(HttpRequestData... reqArgs) {//因内容比较多。具体查看源码 } public void StartRequest(INetResponseListener aListener){ //具体查看源码 }}对于一些有其它特殊需求的开发者,只需要继承这个类,并实现它的抽象接口,如果是通用需求,则可以直接使用下面的MyHttpRequest类:public interface INetResponseListener { /*** 网络请求返回* @param result*/ public void OnRequestComplete(NetResponse result);}调用者只要实现这个interface,异步接收返回结果即可,返回结果就是NetResponse对象。