HTTP通信的两种方式

  注意:在进行Android开发测试HTTP通信时,要特别注意url地址,首先明确测试的工具是模拟器还是真机,在模拟器上可以使用“10.0.2.2:自己的端口号”,在真机测试时务必保证我们的服务端和手机客户端必须在同一网段,如我在学校测试电脑连接的是校园网,真机连接的也必须是校园网,不能是2g网络或者3g等等,其ip地址可以通过ipconfig查看本机的ip号。

一、HTTP通信机制

  在我们的Android项目开发中,有两种方式实现HTTP通信,实现和服务器的数据交互,一种是采用HttpClient,一种是HttpURLConnection。

二、实例

1、HttpClient方式

         /**
	 * 采用HttpClient进行通信:请求方式为post
	 * 针对一般的文本数据传输,不包括图片等其他文件
	 * 1、创建一个HttpClient对象
	 * 2、创建HttpPost对象,关联到uri地址
	 * 3、发送请求等待回应
	 * 4、得到服务器返回结果
	 * @return
	 */
	private String send1() {
		// 这里面的参数可以封装成键值对
		NameValuePair nameValuePair1 = new BasicNameValuePair("name", "yang");
		NameValuePair nameValuePair2 = new BasicNameValuePair("pwd", "123123");
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
		nameValuePairs.add(nameValuePair1);
		nameValuePairs.add(nameValuePair2);
		String uri = "http://10.0.2.2:8080/HttpDemoServer/TestServlet";
		try {
			HttpParams httpParams = new BasicHttpParams();
			HttpConnectionParams.setConnectionTimeout(httpParams, 5000); 
			// 1、创建一个HttpClient对象
			HttpClient client = new DefaultHttpClient(httpParams); 
			// 2、创建请求对象HttpPost,通过这个对象设置请求头headers和请求体body,这里的body可以不是键值对
			HttpPost httpPost = new HttpPost(uri); 
			if (nameValuePairs != null && nameValuePairs.size() != 0) {
				httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,
						HTTP.UTF_8));
			}
			// 3、发送请求并等待响应
			HttpResponse httpResponse = client.execute(httpPost); 
			// 4、得到服务器返回的字符串
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				HttpEntity entity = httpResponse.getEntity(); 
				return EntityUtils.toString(entity,"UTF-8");
			} else {
				return "网络异常";
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("网络异常!");
		}
		return "网络异常";
	}
2、HttpURLConnection方式

         /**
	 * 采用HttpUrlConnection通信:请求方式为get
	 * 针对一般的文本数据传输,不包括图片等其他文件
	 * @return
	 */
	private String send2() {
		// String validateURL = "http://zjx:8080/Test?name=yang";
		String uri = "http://10.0.2.2:8080/HttpDemoServer/TestServlet?name=xingzjx&pwd=111";
		// 1、创建一个HttpURLConnection连接
		HttpURLConnection conn = null;
		try {
			// 2、创建一个URL对象,拿到uri地址
			URL url = new URL(uri); 
			conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000); 
			conn.setRequestMethod("GET");
			// 3、建立到远程对象的实际连接
			conn.connect(); 
			// 4、成功后得到服务器返回的字符串
			// DataInputStream dis = new DataInputStream(conn.getInputStream());
			BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String str = null;
			StringBuffer sb = new StringBuffer();
			while((str = br.readLine())!=null) {
				sb.append(str);
			}
			if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
				return sb.toString();
			} else {
				return "网络异常";
			}
		} catch (Exception e) {  
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.disconnect(); // 中断连接
			}
		}
		return "网络异常";
	}

三、两种通信机制的比较

  HttpClient是阿帕奇下的一个开源项目,封装了Http请求头,参数,内容体,响应等信息。HttpURLConnection是java里面的的标准类,没做封装,使用起来不方便。所以一般情况下使用HttpURLConnection比较好。

   下面是测试用的demo:http://download.csdn.net/detail/u010213127/8492027

里面有一个基于HttpClient实现的封装。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值