1、核心类NetWorkCore,处理发送请求
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
/**
* 网络请求核心类,用于处理发送请求和返回,单例
*
* @author Administrator
*
*/
public class NetworkCore {
//连接超时(ms)
private static final int timeoutConnection = 30000;
//响应超时(ms)
private static final int timeoutSocket = 50000;
private static NetworkCore instance;
/*get请求*/
private HttpGet httpGet;
/*post请求*/
private HttpPost httpPost;
public static NetworkCore Instance() {
if (instance == null) {
instance = new NetworkCore();
}
return instance;
}
/**
* 发送请求
* @param request 请求线程对象
* @return 请求结果
*/
public NetWorkResponseMsg perform(DoRequestRunnable request) {
NetWorkResponseMsg msg = null;
NetworkRequestMsg mNetworkRequestMsg = 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 (IOException e) {
msg.setResponseMsg(NetworkError.CONNECT_ERROR);
} finally {
msg.closeStream();
}
return msg;
}
/**
* get请求
* @param mNetworkRequestMsg
* @return
* @throws ClientProtocolException
* @throws IOException
*/
private NetWorkResponseMsg handleGetRequest(NetworkRequestMsg mNetworkRequestMsg)
throws ClientProtocolException, IOException {
InputStream is = null;
StringBuffer finalURL = new StringBuffer(mNetworkRequestMsg.getUrl());
int index = finalURL.indexOf("?");
if (null != mNetworkRequestMsg.getParam()) {
for (String paramName : 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 = new HttpGet(finalURL.toString());
if (mNetworkRequestMsg.getParam().getParamNames().size() > 0) {
for (String headerName : mNetworkRequestMsg.getParam()
.getHeaderNames()) {
httpGet.addHeader(headerName, mNetworkRequestMsg.getParam()
.getHeaderValue(headerName));
}
}
mNetworkRequestMsg.getParam().clearCache();
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient httpclient = new DefaultHttpClient(httpParameters);
if (mNetworkRequestMsg.isNeedProxy()) {
String address = mNetworkRequestMsg.getProxyAddress() == null ? NetworkConfig.DEFAULT_PROXY
: mNetworkRequestMsg.getProxyAddress();
int port = mNetworkRequestMsg.getProxyPort() == 0 ? NetworkConfig.DEFAULT_PROXYPORT
: mNetworkRequestMsg.getProxyPort();
setProxy(httpclient, address, port);
}
HttpResponse httpResponse = httpclient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
is = httpResponse.getEntity().getContent();
}
return new NetWorkResponseMsg(is,httpResponse.getStatusLine().getStatusCode());
}
/**
* post请求
* @param mNetworkRequestMsg
* @return
* @throws ClientProtocolException
* @throws IOException
*/
private NetWorkResponseMsg handlePostRequest(NetworkRequestMsg mNetworkRequestMsg)
throws ClientProtocolException, IOException {
InputStream is = null;
HttpEntity httpentity = null;
StringBuffer finalURL = new StringBuffer(mNetworkRequestMsg.getUrl());
int index = finalURL.indexOf("?");
if (null != mNetworkRequestMsg.getParam()) {
for (String paramName : 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 = new HttpPost(finalURL.toString());
if (mNetworkRequestMsg.getParam().getParamNames().size() > 0) {
for (String headerName : mNetworkRequestMsg.getParam()
.getHeaderNames()) {
httpPost.addHeader(headerName, mNetworkRequestMsg.getParam()
.getHeaderValue(headerName));
}
}
mNetworkRequestMsg.getParam().clearCache();
if (mNetworkRequestMsg.getParam().getArrayBody() != null) {
httpentity = new ByteArrayEntity(mNetworkRequestMsg.getParam()
.getArrayBody());
} else if (mNetworkRequestMsg.getParam().getBody() != null) {
httpentity = new StringEntity(mNetworkRequestMsg.getParam()
.getBody());
}
if (null != httpentity) {
httpPost.setEntity(httpentity);
}
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient httpclient = new DefaultHttpClient(httpParameters);
if (mNetworkRequestMsg.isNeedProxy()) {
String address = mNetworkRequestMsg.getProxyAddress() == null ? NetworkConfig.DEFAULT_PROXY
: mNetworkRequestMsg.getProxyAddress();
int port = mNetworkRequestMsg.getProxyPort() == 0 ? NetworkConfig.DEFAULT_PROXYPORT
: mNetworkRequestMsg.getProxyPort();
setProxy(httpclient, address, port);
}
HttpResponse httpResponse = httpclient.execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
is = httpResponse.getEntity().getContent();
}
return new NetWorkResponseMsg(is,httpResponse.getStatusLine().getStatusCode());
}
/**
* 断开连接
*/
public void abort(){
if(httpGet != null){
if(!httpGet.isAborted()){
httpGet.abort();
}
}
if(httpPost != null){
if(!httpPost.isAborted()){
httpPost.abort();
}
}
}
/**
*
* @param httpclient
* @param address
* @param port
*/
private void setProxy(HttpClient httpclient, String address, int port) {
HttpHost proxy = new HttpHost(address, port);
httpclient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,
proxy);
}
}
2、请求封装类NetworkRequestMsg:
public class NetworkRequestMsg extends Message {
public static final String GET = "GET";
public static final String POST = "POST";
/**
* 产生自增ID计数器
*/
private static short ID = 0;
/**
* 当前消息id
*/
private short id = 0;
/**
* 当前请求类型(GET/POST)
*/
private String type;
/**
* 请求地址URL
*/
private String url;
/**
* 请求消息参数
*/
private Parameter param;
/**
* 数据连接返回值
*/
private byte retcode = -1;
/**
* 请求是否取消
*/
private boolean cancel = false;
/**
* 是否正在发送数据
*/
private boolean sending = false;
/**
* 是否是下载类型
*/
private boolean download = false;
/**
* 重发次数
*/
private byte sendTime = 0;
/**
* 网络数据解析协议
*/
private String protocol;
/**
* 是否需要代理
*/
private boolean isNeedProxy;
/**
* 代理地址
*/
private String proxyAddress;
/**
* 代理端口
*/
private int proxyPort;
public NetworkRequestMsg(String _url,String _type ,Parameter _param,boolean isNeedProxy,String _proxyAddress,int _proxyPort){
this.url = _url;
this.type = _type;
this.isNeedProxy = isNeedProxy;
this.param = _param;
this.proxyAddress = _proxyAddress;
this.proxyPort = _proxyPort;
}
public static short getID() {
return ID;
}
public static void setID(short iD) {
ID = iD;
}
public short getId() {
return id;
}
public void setId(short id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public byte getRetcode() {
return retcode;
}
public void setRetcode(byte retcode) {
this.retcode = retcode;
}
public boolean isCancel() {
return cancel;
}
public void setCancel(boolean cancel) {
this.cancel = cancel;
}
public boolean isSending() {
return sending;
}
public void setSending(boolean sending) {
this.sending = sending;
}
public boolean isDownload() {
return download;
}
public void setDownload(boolean download) {
this.download = download;
}
public byte getSendTime() {
return sendTime;
}
public void setSendTime(byte sendTime) {
this.sendTime = sendTime;
}
public Parameter getParam() {
return param;
}
public void setParam(Parameter param) {
this.param = param;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public boolean isNeedProxy() {
return isNeedProxy;
}
public void setNeedProxy(boolean isNeedProxy) {
this.isNeedProxy = isNeedProxy;
}
public String getProxyAddress() {
return proxyAddress;
}
public void setProxyAddress(String proxyAddress) {
this.proxyAddress = proxyAddress;
}
public int getProxyPort() {
return proxyPort;
}
public void setProxyPort(int proxyPort) {
this.proxyPort = proxyPort;
}
}
请求参数封装类Parameter:
import java.util.ArrayList;
import java.util.HashMap;
public class Parameter {
private HashMap<String,String> header = new HashMap<String,String>();
private ArrayList<String> allHeaderNames = new ArrayList<String>();
//参数信息
private HashMap<String,String> param = new HashMap<String,String>();
private ArrayList<String> allParamNames = new ArrayList<String>();
//实体信息
private String body;
private byte[] arrayBody;
public String getParamValue(String _name){
return param.get(_name);
}
public String getHeaderValue(String _name){
return header.get(_name);
}
public void addHeader(String _name,String _value) throws Exception{
if(null != _name && null != _value ){
header.put(_name, _value);
allHeaderNames.add(_name);
} else {
throw new Exception("头信息请求参数非法");
}
}
public void addParam(String _name,String _value) throws Exception{
if(null != _name && null != _value ){
param.put(_name, _value);
allParamNames.add(_name);
} else {
throw new Exception("请求参数非法");
}
}
public ArrayList<String> getHeaderNames(){
return allHeaderNames;
}
public ArrayList<String> getParamNames(){
return allParamNames;
}
public void clearCache(){
if(null != header){
header.clear();
}
if(null != allHeaderNames){
allHeaderNames.clear();
}
if(null != param){
param.clear();
}
if(null != allParamNames){
allParamNames.clear();
}
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public byte[] getArrayBody() {
return arrayBody;
}
public void setArrayBody(byte[] arrayBody) {
this.arrayBody = arrayBody;
}
public Parameter(){
clearCache();
}
}
3 响应请求封装类NetWorkResponseMsg:
import java.io.IOException;
import java.io.InputStream;
public class NetWorkResponseMsg {
private InputStream inputStream ;
private int responseCode = 200;
private String responseMsg = null;
public NetWorkResponseMsg() {
}
public NetWorkResponseMsg(InputStream inputStream, int responseCode) {
this.inputStream = inputStream;
this.responseCode = responseCode;
}
public NetWorkResponseMsg(InputStream inputStream, int responseCode,
String responseMsg) {
this.inputStream = inputStream;
this.responseCode = responseCode;
this.responseMsg = responseMsg;
}
public String getResponseMsg() {
return responseMsg;
}
public void setResponseMsg(String responseMsg) {
this.responseMsg = responseMsg;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public int getResponseCode() {
return responseCode;
}
public void setResponseCode(int responseCode) {
this.responseCode = responseCode;
}
public void closeStream(){
try {
if(inputStream != null){
inputStream.close();
}
} catch (IOException e) {
}
}
}