android的网络访问
16lz
2022-07-27
1、核心类NetWorkCore,处理发送请求
view plain- importjava.io.IOException;
- importjava.io.InputStream;
- importorg.apache.http.HttpEntity;
- importorg.apache.http.HttpHost;
- importorg.apache.http.HttpResponse;
- importorg.apache.http.HttpStatus;
- importorg.apache.http.client.ClientProtocolException;
- importorg.apache.http.client.HttpClient;
- importorg.apache.http.client.methods.HttpGet;
- importorg.apache.http.client.methods.HttpPost;
- importorg.apache.http.conn.params.ConnRouteParams;
- importorg.apache.http.entity.ByteArrayEntity;
- importorg.apache.http.entity.StringEntity;
- importorg.apache.http.impl.client.DefaultHttpClient;
- importorg.apache.http.params.BasicHttpParams;
- importorg.apache.http.params.HttpConnectionParams;
- importorg.apache.http.params.HttpParams;
- /**
- *网络请求核心类,用于处理发送请求和返回,单例
- *
- *@authorAdministrator
- *
- */
- publicclassNetworkCore{
- //连接超时(ms)
- privatestaticfinalinttimeoutConnection=30000;
- //响应超时(ms)
- privatestaticfinalinttimeoutSocket=50000;
- privatestaticNetworkCoreinstance;
- /*get请求*/
- privateHttpGethttpGet;
- /*post请求*/
- privateHttpPosthttpPost;
- publicstaticNetworkCoreInstance(){
- if(instance==null){
- instance=newNetworkCore();
- }
- returninstance;
- }
- /**
- *发送请求
- *@paramrequest请求线程对象
- *@return请求结果
- */
- publicNetWorkResponseMsgperform(DoRequestRunnablerequest){
- NetWorkResponseMsgmsg=null;
- NetworkRequestMsgmNetworkRequestMsg=request.getmNetworkRequestMsg();
- try{
- if(NetworkRequestMsg.POST.equals(mNetworkRequestMsg.getType())){
- msg=handlePostRequest(mNetworkRequestMsg);
- }else{
- msg=handleGetRequest(mNetworkRequestMsg);
- }
- if(msg.getInputStream()==null){
- msg.setResponseMsg(NetworkError.NODATA);
- }
- request.handleNetResponseMsg(msg);
- }catch(IOExceptione){
- msg.setResponseMsg(NetworkError.CONNECT_ERROR);
- }finally{
- msg.closeStream();
- }
- returnmsg;
- }
- /**
- *get请求
- *@parammNetworkRequestMsg
- *@return
- *@throwsClientProtocolException
- *@throwsIOException
- */
- privateNetWorkResponseMsghandleGetRequest(NetworkRequestMsgmNetworkRequestMsg)
- throwsClientProtocolException,IOException{
- InputStreamis=null;
- StringBufferfinalURL=newStringBuffer(mNetworkRequestMsg.getUrl());
- intindex=finalURL.indexOf("?");
- if(null!=mNetworkRequestMsg.getParam()){
- for(StringparamName:mNetworkRequestMsg.getParam()
- .getParamNames()){
- if(index==-1){
- finalURL.append("?"
- +paramName
- +"="
- +mNetworkRequestMsg.getParam().getParamValue(
- paramName));
- }else{
- finalURL.append("&"
- +paramName
- +"="
- +mNetworkRequestMsg.getParam().getParamValue(
- paramName));
- }
- index++;
- }
- mNetworkRequestMsg.setUrl(finalURL.toString());
- }
- httpGet=newHttpGet(finalURL.toString());
- if(mNetworkRequestMsg.getParam().getParamNames().size()>0){
- for(StringheaderName:mNetworkRequestMsg.getParam()
- .getHeaderNames()){
- httpGet.addHeader(headerName,mNetworkRequestMsg.getParam()
- .getHeaderValue(headerName));
- }
- }
- mNetworkRequestMsg.getParam().clearCache();
- HttpParamshttpParameters=newBasicHttpParams();
- HttpConnectionParams.setConnectionTimeout(httpParameters,
- timeoutConnection);
- HttpConnectionParams.setSoTimeout(httpParameters,timeoutSocket);
- HttpClienthttpclient=newDefaultHttpClient(httpParameters);
- if(mNetworkRequestMsg.isNeedProxy()){
- Stringaddress=mNetworkRequestMsg.getProxyAddress()==null?NetworkConfig.DEFAULT_PROXY
- :mNetworkRequestMsg.getProxyAddress();
- intport=mNetworkRequestMsg.getProxyPort()==0?NetworkConfig.DEFAULT_PROXYPORT
- :mNetworkRequestMsg.getProxyPort();
- setProxy(httpclient,address,port);
- }
- HttpResponsehttpResponse=httpclient.execute(httpGet);
- if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
- is=httpResponse.getEntity().getContent();
- }
- returnnewNetWorkResponseMsg(is,httpResponse.getStatusLine().getStatusCode());
- }
- /**
- *post请求
- *@parammNetworkRequestMsg
- *@return
- *@throwsClientProtocolException
- *@throwsIOException
- */
- privateNetWorkResponseMsghandlePostRequest(NetworkRequestMsgmNetworkRequestMsg)
- throwsClientProtocolException,IOException{
- InputStreamis=null;
- HttpEntityhttpentity=null;
- StringBufferfinalURL=newStringBuffer(mNetworkRequestMsg.getUrl());
- intindex=finalURL.indexOf("?");
- if(null!=mNetworkRequestMsg.getParam()){
- for(StringparamName:mNetworkRequestMsg.getParam()
- .getParamNames()){
- if(index==-1){
- finalURL.append("?"
- +paramName
- +"="
- +mNetworkRequestMsg.getParam().getParamValue(
- paramName));
- }else{
- finalURL.append("&"
- +paramName
- +"="
- +mNetworkRequestMsg.getParam().getParamValue(
- paramName));
- }
- index++;
- }
- mNetworkRequestMsg.setUrl(finalURL.toString());
- }
- httpPost=newHttpPost(finalURL.toString());
- if(mNetworkRequestMsg.getParam().getParamNames().size()>0){
- for(StringheaderName:mNetworkRequestMsg.getParam()
- .getHeaderNames()){
- httpPost.addHeader(headerName,mNetworkRequestMsg.getParam()
- .getHeaderValue(headerName));
- }
- }
- mNetworkRequestMsg.getParam().clearCache();
- if(mNetworkRequestMsg.getParam().getArrayBody()!=null){
- httpentity=newByteArrayEntity(mNetworkRequestMsg.getParam()
- .getArrayBody());
- }elseif(mNetworkRequestMsg.getParam().getBody()!=null){
- httpentity=newStringEntity(mNetworkRequestMsg.getParam()
- .getBody());
- }
- if(null!=httpentity){
- httpPost.setEntity(httpentity);
- }
- HttpParamshttpParameters=newBasicHttpParams();
- HttpConnectionParams.setConnectionTimeout(httpParameters,
- timeoutConnection);
- HttpConnectionParams.setSoTimeout(httpParameters,timeoutSocket);
- HttpClienthttpclient=newDefaultHttpClient(httpParameters);
- if(mNetworkRequestMsg.isNeedProxy()){
- Stringaddress=mNetworkRequestMsg.getProxyAddress()==null?NetworkConfig.DEFAULT_PROXY
- :mNetworkRequestMsg.getProxyAddress();
- intport=mNetworkRequestMsg.getProxyPort()==0?NetworkConfig.DEFAULT_PROXYPORT
- :mNetworkRequestMsg.getProxyPort();
- setProxy(httpclient,address,port);
- }
- HttpResponsehttpResponse=httpclient.execute(httpPost);
- if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
- is=httpResponse.getEntity().getContent();
- }
- returnnewNetWorkResponseMsg(is,httpResponse.getStatusLine().getStatusCode());
- }
- /**
- *断开连接
- */
- publicvoidabort(){
- if(httpGet!=null){
- if(!httpGet.isAborted()){
- httpGet.abort();
- }
- }
- if(httpPost!=null){
- if(!httpPost.isAborted()){
- httpPost.abort();
- }
- }
- }
- /**
- *
- *@paramhttpclient
- *@paramaddress
- *@paramport
- */
- privatevoidsetProxy(HttpClienthttpclient,Stringaddress,intport){
- HttpHostproxy=newHttpHost(address,port);
- httpclient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,
- proxy);
- }
- }
2、请求封装类NetworkRequestMsg: view plain
- publicclassNetworkRequestMsgextendsMessage{
- publicstaticfinalStringGET="GET";
- publicstaticfinalStringPOST="POST";
- /**
- *产生自增ID计数器
- */
- privatestaticshortID=0;
- /**
- *当前消息id
- */
- privateshortid=0;
- /**
- *当前请求类型(GET/POST)
- */
- privateStringtype;
- /**
- *请求地址URL
- */
- privateStringurl;
- /**
- *请求消息参数
- */
- privateParameterparam;
- /**
- *数据连接返回值
- */
- privatebyteretcode=-1;
- /**
- *请求是否取消
- */
- privatebooleancancel=false;
- /**
- *是否正在发送数据
- */
- privatebooleansending=false;
- /**
- *是否是下载类型
- */
- privatebooleandownload=false;
- /**
- *重发次数
- */
- privatebytesendTime=0;
- /**
- *网络数据解析协议
- */
- privateStringprotocol;
- /**
- *是否需要代理
- */
- privatebooleanisNeedProxy;
- /**
- *代理地址
- */
- privateStringproxyAddress;
- /**
- *代理端口
- */
- privateintproxyPort;
- publicNetworkRequestMsg(String_url,String_type,Parameter_param,booleanisNeedProxy,String_proxyAddress,int_proxyPort){
- this.url=_url;
- this.type=_type;
- this.isNeedProxy=isNeedProxy;
- this.param=_param;
- this.proxyAddress=_proxyAddress;
- this.proxyPort=_proxyPort;
- }
- publicstaticshortgetID(){
- returnID;
- }
- publicstaticvoidsetID(shortiD){
- ID=iD;
- }
- publicshortgetId(){
- returnid;
- }
- publicvoidsetId(shortid){
- this.id=id;
- }
- publicStringgetType(){
- returntype;
- }
- publicvoidsetType(Stringtype){
- this.type=type;
- }
- publicStringgetUrl(){
- returnurl;
- }
- publicvoidsetUrl(Stringurl){
- this.url=url;
- }
- publicbytegetRetcode(){
- returnretcode;
- }
- publicvoidsetRetcode(byteretcode){
- this.retcode=retcode;
- }
- publicbooleanisCancel(){
- returncancel;
- }
- publicvoidsetCancel(booleancancel){
- this.cancel=cancel;
- }
- publicbooleanisSending(){
- returnsending;
- }
- publicvoidsetSending(booleansending){
- this.sending=sending;
- }
- publicbooleanisDownload(){
- returndownload;
- }
- publicvoidsetDownload(booleandownload){
- this.download=download;
- }
- publicbytegetSendTime(){
- returnsendTime;
- }
- publicvoidsetSendTime(bytesendTime){
- this.sendTime=sendTime;
- }
- publicParametergetParam(){
- returnparam;
- }
- publicvoidsetParam(Parameterparam){
- this.param=param;
- }
- publicStringgetProtocol(){
- returnprotocol;
- }
- publicvoidsetProtocol(Stringprotocol){
- this.protocol=protocol;
- }
- publicbooleanisNeedProxy(){
- returnisNeedProxy;
- }
- publicvoidsetNeedProxy(booleanisNeedProxy){
- this.isNeedProxy=isNeedProxy;
- }
- publicStringgetProxyAddress(){
- returnproxyAddress;
- }
- publicvoidsetProxyAddress(StringproxyAddress){
- this.proxyAddress=proxyAddress;
- }
- publicintgetProxyPort(){
- returnproxyPort;
- }
- publicvoidsetProxyPort(intproxyPort){
- this.proxyPort=proxyPort;
- }
- }
请求参数封装类Parameter: view plain
- importjava.util.ArrayList;
- importjava.util.HashMap;
- publicclassParameter{
- privateHashMap<String,String>header=newHashMap<String,String>();
- privateArrayList<String>allHeaderNames=newArrayList<String>();
- //参数信息
- privateHashMap<String,String>param=newHashMap<String,String>();
- privateArrayList<String>allParamNames=newArrayList<String>();
- //实体信息
- privateStringbody;
- privatebyte[]arrayBody;
- publicStringgetParamValue(String_name){
- returnparam.get(_name);
- }
- publicStringgetHeaderValue(String_name){
- returnheader.get(_name);
- }
- publicvoidaddHeader(String_name,String_value)throwsException{
- if(null!=_name&&null!=_value){
- header.put(_name,_value);
- allHeaderNames.add(_name);
- }else{
- thrownewException("头信息请求参数非法");
- }
- }
- publicvoidaddParam(String_name,String_value)throwsException{
- if(null!=_name&&null!=_value){
- param.put(_name,_value);
- allParamNames.add(_name);
- }else{
- thrownewException("请求参数非法");
- }
- }
- publicArrayList<String>getHeaderNames(){
- returnallHeaderNames;
- }
- publicArrayList<String>getParamNames(){
- returnallParamNames;
- }
- publicvoidclearCache(){
- if(null!=header){
- header.clear();
- }
- if(null!=allHeaderNames){
- allHeaderNames.clear();
- }
- if(null!=param){
- param.clear();
- }
- if(null!=allParamNames){
- allParamNames.clear();
- }
- }
- publicStringgetBody(){
- returnbody;
- }
- publicvoidsetBody(Stringbody){
- this.body=body;
- }
- publicbyte[]getArrayBody(){
- returnarrayBody;
- }
- publicvoidsetArrayBody(byte[]arrayBody){
- this.arrayBody=arrayBody;
- }
- publicParameter(){
- clearCache();
- }
- }
3 响应请求封装类NetWorkResponseMsg:
view plain
- importjava.io.IOException;
- importjava.io.InputStream;
- publicclassNetWorkResponseMsg{
- privateInputStreaminputStream;
- privateintresponseCode=200;
- privateStringresponseMsg=null;
- publicNetWorkResponseMsg(){
- }
- publicNetWorkResponseMsg(InputStreaminputStream,intresponseCode){
- this.inputStream=inputStream;
- this.responseCode=responseCode;
- }
- publicNetWorkResponseMsg(InputStreaminputStream,intresponseCode,
- StringresponseMsg){
- this.inputStream=inputStream;
- this.responseCode=responseCode;
- this.responseMsg=responseMsg;
- }
- publicStringgetResponseMsg(){
- returnresponseMsg;
- }
- publicvoidsetResponseMsg(StringresponseMsg){
- this.responseMsg=responseMsg;
- }
- publicInputStreamgetInputStream(){
- returninputStream;
- }
- publicvoidsetInputStream(InputStreaminputStream){
- this.inputStream=inputStream;
- }
- publicintgetResponseCode(){
- returnresponseCode;
- }
- publicvoidsetResponseCode(intresponseCode){
- this.responseCode=responseCode;
- }
- publicvoidcloseStream(){
- try{
- if(inputStream!=null){
- inputStream.close();
- }
- }catch(IOExceptione){
- }
- }
- }
更多相关文章
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- Python技巧匿名函数、回调函数和高阶函数
- python list.sort()根据多个关键字排序的方法实现
- android中文api(89)——ViewManager
- Android使用Retrofit进行网络请求
- Android(安卓)bluetooth介绍(四): a2dp connect流程分析
- Android调用天气预报的WebService简单例子
- Android(安卓)Activity的启动
- Android(安卓)开发中的倒计时