Apache 大三方法HTTP请求链接响应之HttpClient的GET和POST工具类封装

原创 2015年11月20日 00:29:41

一、在HttpConnectUtils 定义一个回调接口,并注册接口

<span style="font-size:14px;">/** 第一步定义接口 */
	public interface HTTPCallBack {
		public void returnMessage(String message);
	}
	
	/** 注册接口 */
	HTTPCallBack httpCallBack;</span>


、定义HttpClient的请求方法GET和POST

<span style="font-size:14px;">public interface RequestMethod {
		public static final String GET = "GET";
		public static final String POST = "POST";

	}</span>


、构建一个方法更具GET和POST方法等返回一个HttpUriRequest对象

<span style="font-size:14px;">/**
	 * 主要返回HttpUriRequest对象供上层调用
	 * 
	 * @param url
	 *            服务器网络地址String型
	 * @param requestMethod
	 *            HttpClient请求方法
	 * @param params
	 *            需要传的参数HashMap<String, Object>型
	 * @return
	 */
	private HttpUriRequest getHttpUriRequest(String url, String requestMethod, HashMap<String, Object> params) {
		HttpUriRequest request = null;
		if (requestMethod.equals(RequestMethod.GET)) {
			
			/**
			 * StringBuilder拼接字符串
			 */
			StringBuilder builder = new StringBuilder();
			builder.append("?");
			String urls = url;
			if (params.size() != 0 && params != null) {
				//HashMap简直对遍历
				for (String key : params.keySet()) {
					
					String name = key;
					Object value = params.get(key);
					builder.append(name + "=" + value);
					builder.append("&");
				}
				String parameter = builder.substring(0, (builder.toString().length() - 1));
				urls = urls + parameter;

			}
			request = new HttpGet(urls);
		} else if (requestMethod.equals(RequestMethod.POST)) {
			request = new HttpPost(url);
			ArrayList<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
			if (params.size() != 0 && params != null) {
				for (String key : params.keySet()) {
					/**Apache的HttpClient——POST请求方法需要用到BasicNameValuePair类以键值对赋值
					 * 并将对象存入集合中,将集合对象作为参数付给HttpEntity对象,在加载到请求方法对象中去,同时注意中文乱码准备
					 * */
					BasicNameValuePair valuePair = new BasicNameValuePair(key, (String) params.get(key));
					pairs.add(valuePair);

				}
				try {

					// 防止中文乱码
					HttpEntity entity = new UrlEncodedFormEntity(pairs, HTTP.UTF_8);
					request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
					((HttpPost) request).setEntity(entity);

				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}

			}

		}
		return request;

	}</span>


第四、创建一个方法得,并传入HttpUriRequest对象到请求返回的参数值


<span style="font-size:18px;">/**
	 * 主要作用就是请求网络得到响应参数
	 * 
	 * @param urls
	 *            服务器网络地址String型
	 * @param requestMethod
	 *            HttpClient请求方法
	 * @param parameter
	 *            需要传的参数HashMap<String, Object>型
	 * @return
	 */
	private String getHttpClientResultData(String urls, String requestMethod, HashMap<String, Object> parameter) {
		HttpClient client = new DefaultHttpClient();
		HttpUriRequest request = getHttpUriRequest(urls, requestMethod, parameter);
		String str = null;
		try {
			HttpResponse response = client.execute(request);
			str = EntityUtils.toString(response.getEntity());
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return str;

	}</span>


五、根据返回的参数值采用异步任务执行代码,调用接口方法


<span style="font-size:14px;">/**
	 * 有参处理 异步任务执行网络请求相应处理 根据传URI 参数,请求方式, 从服务端获取数据
	 * 
	 * @param urls
	 *            服务器网络地址String型
	 * @param requestMethod
	 *            HttpClient请求方法
	 * @param parameter
	 *            需要传的参数HashMap<String, Object>型
	 * @param httpCallBacks
	 *            需要回调的接口实例
	 */
	public void asyncTaskRunHttpClient(String urls, final String requestMethod, final HashMap<String, Object> parameter,
			final HTTPCallBack httpCallBacks) {
		httpCallBack = httpCallBacks;
		AsyncTask<String, Void, String> asyncTask = new AsyncTask<String, Void, String>() {

			@Override
			protected String doInBackground(String... params) {

				return getHttpClientResultData(params[0], requestMethod, parameter);
			}

			@Override
			protected void onPostExecute(String result) {
				super.onPostExecute(result);
				if (result != null) {
					httpCallBack.returnMessage(result);
				}

			};
		};
		asyncTask.execute(urls);
	}</span>

、客户端调用工具类,实现接口的方法,便实现回调


case R.id.httpclient_utils_apache_post_button:
			String url = "http://192.168.2.110:8080/app/login";//写自己的服务器地址
			String method = "POST";
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("user", "admin");
			map.put("psw", "123456");
			new HttpConnectUtils().asyncTaskRunHttpClient(url, method, map, new HTTPCallBack() {
				
				@Override
				public void returnMessage(String message) {
					mTextView.setText(message);
				}
			});
			break;



版权声明:本文为博主原创文章,未经博主允许不得转载。

解析JSON数据,并从其中的图片地址取图片

首先,要解决的是取JSON对象,JSON对象里面还嵌套了3个JSON对象,然后其中一个JSON对象又嵌套了一个JSON对象和数组,如下格式的:     下面开始解析,首先联网取得JSON数据...

ListView结合AsyncTask获取数据

首先封装一个工具类 以方便在主方法调用它的方法 /**  * Created by Wuhuiying on 2017/10/31.  */ public class Netutil { pr...

Http使用post方式提交数据(使用apache标准接口)

本文:目的和前一篇一样,唯一区别是本文用apache标准接口进行http的post提交数据,而前一篇是用 java标准接口实现。 ----------------------------------...

HttpClient使用详解

Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且...

mybatis的使用中,xxxx.action方法总是找不到,而配置没有问题

我使用的逆向工程生成相应的mapper.class和mapper.xml。因为改了什么,我就再次运行了逆向工程,以为会得到最新的文件。但是其实旧文件不会被覆盖,新生成的代码会追加在原来的代码后面,这就...

Java.net.URLConnection和Apache HTTPClient的主要区别对比

http://www.jfox.info/java-net-urlconnection%E5%92%8Capache-httpclient%E7%9A%84%E4%B8%BB%E8%A6%81%E5%...

http发送Get和Post请求工具类

  • 2017年10月30日 09:56
  • 19KB
  • 下载

http跨平台访问接口的post,get,及文件上传方式工具类(httpClient)

需要先引入工具类httpclient-4.5.jar,httpcore-4.4.6.jar //---------------------------------------------------...

java http请求的get和post方法工具类

public class BaseHttpRequest { /**      * 向指定URL发送GET方法的请求      *       * @param url      *    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apache 大三方法HTTP请求链接响应之HttpClient的GET和POST工具类封装
举报原因:
原因补充:

(最多只允许输入30个字)