public class HttpRequest {
/**
* Default connection timeout 默认连接超时时间
*/
private static final int M_CONNECTION_TIMEOUT = 5 * 1000;
/**
* Default socket timeout 默认套接字超市时间
*/
private static final int M_SO_TIMEOUT = 100 * 1000;
/**
* 获取ResponseResult
*
* @param is
* @param handler
* @return
*/
private static ResponseResult parseResponseResult(InputStream is, Handler handler) {
ResponseResult responseResult = null;
try {
if (is != null) {
StringBuffer sb = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
for (String str = reader.readLine(); str != null; str = reader.readLine()) {
sb.append(str);
}
responseResult = new Gson().fromJson(sb.toString(), ResponseResult.class);
}
} catch (Exception e) {
e.printStackTrace();
Message message = Message.obtain();
message.obj = "数据解析异常";
message.what = 0;
handler.sendMessage(message);
Log2FileUtil.saveLog2File(e);
} finally {
return responseResult;
}
}
/**
* Post获取InputStream
*
* @param context
* @param url
* @param params
* @param handler
* @return
*/
private static InputStream postRestHandler(Context context, String url, Object params, Handler handler) {
try {
//创建一个Http客户端
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, M_CONNECTION_TIMEOUT);
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, M_SO_TIMEOUT);
//创建一个Post请求
HttpPost httpPost = new HttpPost(url);
HttpEntity entity = new StringEntity(JsonUtil.toJSONString(params), "UTF-8");
httpPost.setEntity(entity);
//向服务器发送请求并获取服务器返回结果
//token后续要根据参数获取
httpPost.setHeader("Content-Type", "application/json");
HttpResponse response = client.execute(httpPost);
//无数据
if (response == null) {
if (handler != null) {
Message message = Message.obtain();
message.obj = "网络未连通,请稍后再试!\n如连续失败多次,请检查网络是否正常,可尝试关闭Wi-Fi后重新连接!";
message.what = 0;
handler.sendMessage(message);
}
return null;
}
//有数据
int statusCode = response.getStatusLine().getStatusCode();
//状态码200
if (statusCode == HttpStatus.SC_OK) {
//返回结果
InputStream inputStream = response.getEntity().getContent();
return inputStream;
}
//非状态码200
if (handler != null) {
Message message = Message.obtain();
message.obj = "HTTP Status Code:" + statusCode;
message.what = StatusEnum.HTTP_ERROR.getCode();
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
Log2FileUtil.saveLog2File(e);
if (handler != null) {
Message message = Message.obtain();
message.obj = "服务器无响应!";
message.what = StatusEnum.HTTP_ERROR.getCode();
//检查是否因网络或服务异常
if (!NetworkUtil.isAllNetworkAvailable(context)) {
message.obj = "网络异常,请检查网络设置!";
}
handler.sendMessage(message);
}
}
return null;
}
/**
* Get获取InputStream
*
* @param context
* @param url
* @param params
* @param handler
* @return
*/
private static InputStream getRestHandler(Context context, String url, Object params, Handler handler) {
try {
//创建一个Http客户端
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, M_CONNECTION_TIMEOUT);
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, M_SO_TIMEOUT);
//创建一个Get请求
HttpGetWithEntity httpGet = new HttpGetWithEntity(url);
HttpEntity entity = new StringEntity(JsonUtil.toJSONString(params), "UTF-8");
httpGet.setEntity(entity);
//向服务器发送请求并获取服务器返回结果
//token后续要根据参数获取
httpGet.setHeader("Content-Type", "application/json");
HttpResponse response = client.execute(httpGet);
//无数据
if (response == null) {
if (handler != null) {
Message message = Message.obtain();
message.obj = "网络未连通,请稍后再试!\n如连续失败多次,请检查网络是否正常,可尝试关闭Wi-Fi后重新连接!";
message.what = 0;
handler.sendMessage(message);
}
return null;
}
//有数据
int statusCode = response.getStatusLine().getStatusCode();
//状态码200
if (statusCode == HttpStatus.SC_OK) {
//返回结果
InputStream inputStream = response.getEntity().getContent();
return inputStream;
}
//非状态码200
if (handler != null) {
Message message = Message.obtain();
message.obj = "HTTP Status Code:" + statusCode;
message.what = StatusEnum.HTTP_ERROR.getCode();
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
Log2FileUtil.saveLog2File(e);
if (handler != null) {
Message message = Message.obtain();
message.obj = "服务器无响应!";
message.what = StatusEnum.HTTP_ERROR.getCode();
//检查是否因网络或服务异常
if (!NetworkUtil.isAllNetworkAvailable(context)) {
message.obj = "网络异常,请检查网络设置!";
}
handler.sendMessage(message);
}
}
return null;
}
/**
* Post请求数据
*
* @param context
* @param url
* @param params
* @param handler
* @return
*/
public static ResponseResult postResponseResult(Context context, String url, Object params, Handler handler) {
ResponseResult responseResult = null;
try {
Log.i("POST请求:" + context.getClass().getSimpleName(), "地址:" + url);
Log.i("POST请求:" + context.getClass().getSimpleName(), "参数:" + JsonUtil.toJSONString(params));
String token = AppCfg.getInstatce(context).getString(Contants.UserInfo.USER_TOKEN, "");
//获取InputStream
InputStream is = postRestHandler(context, url, params, handler);
//获取ResponseResult
responseResult = parseResponseResult(is, handler);
//处理ResponseResult弹窗
if (responseResult != null) {
Message message = Message.obtain();
message.what = responseResult.getRespCode();
message.obj = responseResult.getMessage();
handler.sendMessage(message);
}
Log.i("POST请求:" + context.getClass().getSimpleName(), "结果:" + JsonUtil.toJSONString(responseResult));
} catch (Exception e) {
e.printStackTrace();
ToastUtil.showByString("数据解析出错");
} finally {
return responseResult;
}
}
/**
* Get请求数据
*
* @param context
* @param url
* @param params
* @param handler
* @return
*/
public static ResponseResult getResponseResult(Context context, String url, Object params, Handler handler) {
ResponseResult responseResult = null;
try {
Log.i("GET请求:" + context.getClass().getSimpleName(), "地址:" + url);
Log.i("GET请求:" + context.getClass().getSimpleName(), "参数:" + JsonUtil.toJSONString(params));
String token = AppCfg.getInstatce(context).getString(Contants.UserInfo.USER_TOKEN, "");
//获取InputStream
InputStream is = getRestHandler(context, url, params, handler);
//获取ResponseResult
responseResult = parseResponseResult(is, handler);
//处理ResponseResult弹窗
if (responseResult != null) {
Message message = Message.obtain();
message.what = responseResult.getRespCode();
message.obj = responseResult.getMessage();
handler.sendMessage(message);
}
Log.i("GET请求:" + context.getClass().getSimpleName(), "结果:" + JsonUtil.toJSONString(responseResult));
} catch (Exception e) {
e.printStackTrace();
ToastUtil.showByString("数据解析出错");
} finally {
return responseResult;
}
}
}
public class ResponseResult implements Serializable {
private String message; // 接口调用结果描述信息
private Integer respCode; // 服务响应编号成功为1 -1为请求失败,其它编号
private Object data;//业务数据
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getRespCode() {
return respCode;
}
public void setRespCode(Integer respCode) {
this.respCode = respCode;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase {
private final static String METHOD_NAME = "GET";
@Override
public String getMethod() {
return METHOD_NAME;
}
public HttpGetWithEntity() {
super();
}
public HttpGetWithEntity(final URI uri) {
super();
setURI(uri);
}
HttpGetWithEntity(final String uri) {
super();
setURI(URI.create(uri));
}
}
android stuidio下的org.apache.http.client.HttpClient的get和post访问
最新推荐文章于 2024-06-13 15:14:53 发布