1、核心类NetWorkCore,处理发送请求

view plain
  1. importjava.io.IOException;
  2. importjava.io.InputStream;
  3. importorg.apache.http.HttpEntity;
  4. importorg.apache.http.HttpHost;
  5. importorg.apache.http.HttpResponse;
  6. importorg.apache.http.HttpStatus;
  7. importorg.apache.http.client.ClientProtocolException;
  8. importorg.apache.http.client.HttpClient;
  9. importorg.apache.http.client.methods.HttpGet;
  10. importorg.apache.http.client.methods.HttpPost;
  11. importorg.apache.http.conn.params.ConnRouteParams;
  12. importorg.apache.http.entity.ByteArrayEntity;
  13. importorg.apache.http.entity.StringEntity;
  14. importorg.apache.http.impl.client.DefaultHttpClient;
  15. importorg.apache.http.params.BasicHttpParams;
  16. importorg.apache.http.params.HttpConnectionParams;
  17. importorg.apache.http.params.HttpParams;
  18. /**
  19. *网络请求核心类,用于处理发送请求和返回,单例
  20. *
  21. *@authorAdministrator
  22. *
  23. */
  24. publicclassNetworkCore{
  25. //连接超时(ms)
  26. privatestaticfinalinttimeoutConnection=30000;
  27. //响应超时(ms)
  28. privatestaticfinalinttimeoutSocket=50000;
  29. privatestaticNetworkCoreinstance;
  30. /*get请求*/
  31. privateHttpGethttpGet;
  32. /*post请求*/
  33. privateHttpPosthttpPost;
  34. publicstaticNetworkCoreInstance(){
  35. if(instance==null){
  36. instance=newNetworkCore();
  37. }
  38. returninstance;
  39. }
  40. /**
  41. *发送请求
  42. *@paramrequest请求线程对象
  43. *@return请求结果
  44. */
  45. publicNetWorkResponseMsgperform(DoRequestRunnablerequest){
  46. NetWorkResponseMsgmsg=null;
  47. NetworkRequestMsgmNetworkRequestMsg=request.getmNetworkRequestMsg();
  48. try{
  49. if(NetworkRequestMsg.POST.equals(mNetworkRequestMsg.getType())){
  50. msg=handlePostRequest(mNetworkRequestMsg);
  51. }else{
  52. msg=handleGetRequest(mNetworkRequestMsg);
  53. }
  54. if(msg.getInputStream()==null){
  55. msg.setResponseMsg(NetworkError.NODATA);
  56. }
  57. request.handleNetResponseMsg(msg);
  58. }catch(IOExceptione){
  59. msg.setResponseMsg(NetworkError.CONNECT_ERROR);
  60. }finally{
  61. msg.closeStream();
  62. }
  63. returnmsg;
  64. }
  65. /**
  66. *get请求
  67. *@parammNetworkRequestMsg
  68. *@return
  69. *@throwsClientProtocolException
  70. *@throwsIOException
  71. */
  72. privateNetWorkResponseMsghandleGetRequest(NetworkRequestMsgmNetworkRequestMsg)
  73. throwsClientProtocolException,IOException{
  74. InputStreamis=null;
  75. StringBufferfinalURL=newStringBuffer(mNetworkRequestMsg.getUrl());
  76. intindex=finalURL.indexOf("?");
  77. if(null!=mNetworkRequestMsg.getParam()){
  78. for(StringparamName:mNetworkRequestMsg.getParam()
  79. .getParamNames()){
  80. if(index==-1){
  81. finalURL.append("?"
  82. +paramName
  83. +"="
  84. +mNetworkRequestMsg.getParam().getParamValue(
  85. paramName));
  86. }else{
  87. finalURL.append("&"
  88. +paramName
  89. +"="
  90. +mNetworkRequestMsg.getParam().getParamValue(
  91. paramName));
  92. }
  93. index++;
  94. }
  95. mNetworkRequestMsg.setUrl(finalURL.toString());
  96. }
  97. httpGet=newHttpGet(finalURL.toString());
  98. if(mNetworkRequestMsg.getParam().getParamNames().size()>0){
  99. for(StringheaderName:mNetworkRequestMsg.getParam()
  100. .getHeaderNames()){
  101. httpGet.addHeader(headerName,mNetworkRequestMsg.getParam()
  102. .getHeaderValue(headerName));
  103. }
  104. }
  105. mNetworkRequestMsg.getParam().clearCache();
  106. HttpParamshttpParameters=newBasicHttpParams();
  107. HttpConnectionParams.setConnectionTimeout(httpParameters,
  108. timeoutConnection);
  109. HttpConnectionParams.setSoTimeout(httpParameters,timeoutSocket);
  110. HttpClienthttpclient=newDefaultHttpClient(httpParameters);
  111. if(mNetworkRequestMsg.isNeedProxy()){
  112. Stringaddress=mNetworkRequestMsg.getProxyAddress()==null?NetworkConfig.DEFAULT_PROXY
  113. :mNetworkRequestMsg.getProxyAddress();
  114. intport=mNetworkRequestMsg.getProxyPort()==0?NetworkConfig.DEFAULT_PROXYPORT
  115. :mNetworkRequestMsg.getProxyPort();
  116. setProxy(httpclient,address,port);
  117. }
  118. HttpResponsehttpResponse=httpclient.execute(httpGet);
  119. if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  120. is=httpResponse.getEntity().getContent();
  121. }
  122. returnnewNetWorkResponseMsg(is,httpResponse.getStatusLine().getStatusCode());
  123. }
  124. /**
  125. *post请求
  126. *@parammNetworkRequestMsg
  127. *@return
  128. *@throwsClientProtocolException
  129. *@throwsIOException
  130. */
  131. privateNetWorkResponseMsghandlePostRequest(NetworkRequestMsgmNetworkRequestMsg)
  132. throwsClientProtocolException,IOException{
  133. InputStreamis=null;
  134. HttpEntityhttpentity=null;
  135. StringBufferfinalURL=newStringBuffer(mNetworkRequestMsg.getUrl());
  136. intindex=finalURL.indexOf("?");
  137. if(null!=mNetworkRequestMsg.getParam()){
  138. for(StringparamName:mNetworkRequestMsg.getParam()
  139. .getParamNames()){
  140. if(index==-1){
  141. finalURL.append("?"
  142. +paramName
  143. +"="
  144. +mNetworkRequestMsg.getParam().getParamValue(
  145. paramName));
  146. }else{
  147. finalURL.append("&"
  148. +paramName
  149. +"="
  150. +mNetworkRequestMsg.getParam().getParamValue(
  151. paramName));
  152. }
  153. index++;
  154. }
  155. mNetworkRequestMsg.setUrl(finalURL.toString());
  156. }
  157. httpPost=newHttpPost(finalURL.toString());
  158. if(mNetworkRequestMsg.getParam().getParamNames().size()>0){
  159. for(StringheaderName:mNetworkRequestMsg.getParam()
  160. .getHeaderNames()){
  161. httpPost.addHeader(headerName,mNetworkRequestMsg.getParam()
  162. .getHeaderValue(headerName));
  163. }
  164. }
  165. mNetworkRequestMsg.getParam().clearCache();
  166. if(mNetworkRequestMsg.getParam().getArrayBody()!=null){
  167. httpentity=newByteArrayEntity(mNetworkRequestMsg.getParam()
  168. .getArrayBody());
  169. }elseif(mNetworkRequestMsg.getParam().getBody()!=null){
  170. httpentity=newStringEntity(mNetworkRequestMsg.getParam()
  171. .getBody());
  172. }
  173. if(null!=httpentity){
  174. httpPost.setEntity(httpentity);
  175. }
  176. HttpParamshttpParameters=newBasicHttpParams();
  177. HttpConnectionParams.setConnectionTimeout(httpParameters,
  178. timeoutConnection);
  179. HttpConnectionParams.setSoTimeout(httpParameters,timeoutSocket);
  180. HttpClienthttpclient=newDefaultHttpClient(httpParameters);
  181. if(mNetworkRequestMsg.isNeedProxy()){
  182. Stringaddress=mNetworkRequestMsg.getProxyAddress()==null?NetworkConfig.DEFAULT_PROXY
  183. :mNetworkRequestMsg.getProxyAddress();
  184. intport=mNetworkRequestMsg.getProxyPort()==0?NetworkConfig.DEFAULT_PROXYPORT
  185. :mNetworkRequestMsg.getProxyPort();
  186. setProxy(httpclient,address,port);
  187. }
  188. HttpResponsehttpResponse=httpclient.execute(httpPost);
  189. if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  190. is=httpResponse.getEntity().getContent();
  191. }
  192. returnnewNetWorkResponseMsg(is,httpResponse.getStatusLine().getStatusCode());
  193. }
  194. /**
  195. *断开连接
  196. */
  197. publicvoidabort(){
  198. if(httpGet!=null){
  199. if(!httpGet.isAborted()){
  200. httpGet.abort();
  201. }
  202. }
  203. if(httpPost!=null){
  204. if(!httpPost.isAborted()){
  205. httpPost.abort();
  206. }
  207. }
  208. }
  209. /**
  210. *
  211. *@paramhttpclient
  212. *@paramaddress
  213. *@paramport
  214. */
  215. privatevoidsetProxy(HttpClienthttpclient,Stringaddress,intport){
  216. HttpHostproxy=newHttpHost(address,port);
  217. httpclient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,
  218. proxy);
  219. }
  220. }

2、请求封装类NetworkRequestMsg: view plain
  1. publicclassNetworkRequestMsgextendsMessage{
  2. publicstaticfinalStringGET="GET";
  3. publicstaticfinalStringPOST="POST";
  4. /**
  5. *产生自增ID计数器
  6. */
  7. privatestaticshortID=0;
  8. /**
  9. *当前消息id
  10. */
  11. privateshortid=0;
  12. /**
  13. *当前请求类型(GET/POST)
  14. */
  15. privateStringtype;
  16. /**
  17. *请求地址URL
  18. */
  19. privateStringurl;
  20. /**
  21. *请求消息参数
  22. */
  23. privateParameterparam;
  24. /**
  25. *数据连接返回值
  26. */
  27. privatebyteretcode=-1;
  28. /**
  29. *请求是否取消
  30. */
  31. privatebooleancancel=false;
  32. /**
  33. *是否正在发送数据
  34. */
  35. privatebooleansending=false;
  36. /**
  37. *是否是下载类型
  38. */
  39. privatebooleandownload=false;
  40. /**
  41. *重发次数
  42. */
  43. privatebytesendTime=0;
  44. /**
  45. *网络数据解析协议
  46. */
  47. privateStringprotocol;
  48. /**
  49. *是否需要代理
  50. */
  51. privatebooleanisNeedProxy;
  52. /**
  53. *代理地址
  54. */
  55. privateStringproxyAddress;
  56. /**
  57. *代理端口
  58. */
  59. privateintproxyPort;
  60. publicNetworkRequestMsg(String_url,String_type,Parameter_param,booleanisNeedProxy,String_proxyAddress,int_proxyPort){
  61. this.url=_url;
  62. this.type=_type;
  63. this.isNeedProxy=isNeedProxy;
  64. this.param=_param;
  65. this.proxyAddress=_proxyAddress;
  66. this.proxyPort=_proxyPort;
  67. }
  68. publicstaticshortgetID(){
  69. returnID;
  70. }
  71. publicstaticvoidsetID(shortiD){
  72. ID=iD;
  73. }
  74. publicshortgetId(){
  75. returnid;
  76. }
  77. publicvoidsetId(shortid){
  78. this.id=id;
  79. }
  80. publicStringgetType(){
  81. returntype;
  82. }
  83. publicvoidsetType(Stringtype){
  84. this.type=type;
  85. }
  86. publicStringgetUrl(){
  87. returnurl;
  88. }
  89. publicvoidsetUrl(Stringurl){
  90. this.url=url;
  91. }
  92. publicbytegetRetcode(){
  93. returnretcode;
  94. }
  95. publicvoidsetRetcode(byteretcode){
  96. this.retcode=retcode;
  97. }
  98. publicbooleanisCancel(){
  99. returncancel;
  100. }
  101. publicvoidsetCancel(booleancancel){
  102. this.cancel=cancel;
  103. }
  104. publicbooleanisSending(){
  105. returnsending;
  106. }
  107. publicvoidsetSending(booleansending){
  108. this.sending=sending;
  109. }
  110. publicbooleanisDownload(){
  111. returndownload;
  112. }
  113. publicvoidsetDownload(booleandownload){
  114. this.download=download;
  115. }
  116. publicbytegetSendTime(){
  117. returnsendTime;
  118. }
  119. publicvoidsetSendTime(bytesendTime){
  120. this.sendTime=sendTime;
  121. }
  122. publicParametergetParam(){
  123. returnparam;
  124. }
  125. publicvoidsetParam(Parameterparam){
  126. this.param=param;
  127. }
  128. publicStringgetProtocol(){
  129. returnprotocol;
  130. }
  131. publicvoidsetProtocol(Stringprotocol){
  132. this.protocol=protocol;
  133. }
  134. publicbooleanisNeedProxy(){
  135. returnisNeedProxy;
  136. }
  137. publicvoidsetNeedProxy(booleanisNeedProxy){
  138. this.isNeedProxy=isNeedProxy;
  139. }
  140. publicStringgetProxyAddress(){
  141. returnproxyAddress;
  142. }
  143. publicvoidsetProxyAddress(StringproxyAddress){
  144. this.proxyAddress=proxyAddress;
  145. }
  146. publicintgetProxyPort(){
  147. returnproxyPort;
  148. }
  149. publicvoidsetProxyPort(intproxyPort){
  150. this.proxyPort=proxyPort;
  151. }
  152. }

请求参数封装类Parameter: view plain
  1. importjava.util.ArrayList;
  2. importjava.util.HashMap;
  3. publicclassParameter{
  4. privateHashMap<String,String>header=newHashMap<String,String>();
  5. privateArrayList<String>allHeaderNames=newArrayList<String>();
  6. //参数信息
  7. privateHashMap<String,String>param=newHashMap<String,String>();
  8. privateArrayList<String>allParamNames=newArrayList<String>();
  9. //实体信息
  10. privateStringbody;
  11. privatebyte[]arrayBody;
  12. publicStringgetParamValue(String_name){
  13. returnparam.get(_name);
  14. }
  15. publicStringgetHeaderValue(String_name){
  16. returnheader.get(_name);
  17. }
  18. publicvoidaddHeader(String_name,String_value)throwsException{
  19. if(null!=_name&&null!=_value){
  20. header.put(_name,_value);
  21. allHeaderNames.add(_name);
  22. }else{
  23. thrownewException("头信息请求参数非法");
  24. }
  25. }
  26. publicvoidaddParam(String_name,String_value)throwsException{
  27. if(null!=_name&&null!=_value){
  28. param.put(_name,_value);
  29. allParamNames.add(_name);
  30. }else{
  31. thrownewException("请求参数非法");
  32. }
  33. }
  34. publicArrayList<String>getHeaderNames(){
  35. returnallHeaderNames;
  36. }
  37. publicArrayList<String>getParamNames(){
  38. returnallParamNames;
  39. }
  40. publicvoidclearCache(){
  41. if(null!=header){
  42. header.clear();
  43. }
  44. if(null!=allHeaderNames){
  45. allHeaderNames.clear();
  46. }
  47. if(null!=param){
  48. param.clear();
  49. }
  50. if(null!=allParamNames){
  51. allParamNames.clear();
  52. }
  53. }
  54. publicStringgetBody(){
  55. returnbody;
  56. }
  57. publicvoidsetBody(Stringbody){
  58. this.body=body;
  59. }
  60. publicbyte[]getArrayBody(){
  61. returnarrayBody;
  62. }
  63. publicvoidsetArrayBody(byte[]arrayBody){
  64. this.arrayBody=arrayBody;
  65. }
  66. publicParameter(){
  67. clearCache();
  68. }
  69. }

3 响应请求封装类NetWorkResponseMsg:
view plain
  1. importjava.io.IOException;
  2. importjava.io.InputStream;
  3. publicclassNetWorkResponseMsg{
  4. privateInputStreaminputStream;
  5. privateintresponseCode=200;
  6. privateStringresponseMsg=null;
  7. publicNetWorkResponseMsg(){
  8. }
  9. publicNetWorkResponseMsg(InputStreaminputStream,intresponseCode){
  10. this.inputStream=inputStream;
  11. this.responseCode=responseCode;
  12. }
  13. publicNetWorkResponseMsg(InputStreaminputStream,intresponseCode,
  14. StringresponseMsg){
  15. this.inputStream=inputStream;
  16. this.responseCode=responseCode;
  17. this.responseMsg=responseMsg;
  18. }
  19. publicStringgetResponseMsg(){
  20. returnresponseMsg;
  21. }
  22. publicvoidsetResponseMsg(StringresponseMsg){
  23. this.responseMsg=responseMsg;
  24. }
  25. publicInputStreamgetInputStream(){
  26. returninputStream;
  27. }
  28. publicvoidsetInputStream(InputStreaminputStream){
  29. this.inputStream=inputStream;
  30. }
  31. publicintgetResponseCode(){
  32. returnresponseCode;
  33. }
  34. publicvoidsetResponseCode(intresponseCode){
  35. this.responseCode=responseCode;
  36. }
  37. publicvoidcloseStream(){
  38. try{
  39. if(inputStream!=null){
  40. inputStream.close();
  41. }
  42. }catch(IOExceptione){
  43. }
  44. }
  45. }

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. Python技巧匿名函数、回调函数和高阶函数
  3. python list.sort()根据多个关键字排序的方法实现
  4. android中文api(89)——ViewManager
  5. Android使用Retrofit进行网络请求
  6. Android(安卓)bluetooth介绍(四): a2dp connect流程分析
  7. Android调用天气预报的WebService简单例子
  8. Android(安卓)Activity的启动
  9. Android(安卓)开发中的倒计时

随机推荐

  1. php 的变量与常量----0426
  2. js 中 for,foreach 遍历数组,与PHP 中 for,f
  3. 网站安全响应头缺失和php配置漏洞
  4. php之请求api数据与composer
  5. 本地git的配置和一些命令
  6. php之mvc架构思想
  7. 白话Thinkphp5.1
  8. javascript内容整理
  9. 坚持自己的学习方法不动摇
  10. 小白的PHP之路