Android网络连接1——DefaultHttpClient

Windy 2014-03-19

    Android SDK 支持两种直接访问HTTP资源的方式:DefaultHttpClient 和 HttpURLConnection 。这两种方式都封装了HTTP请求。其中DefaultHttpClient 通过HttpGet 和 HttpPost 分别封装了GET 和 POST 请求。HttpURLConnection 通过URL的构造方法制定HTTP资源地址,然后通过URL.openConnection来获取HttpURLConnection对象。除此之外,可以用 客户端Socket发送HTTP请求。

  本文主要介绍DefaultHttpClient。

  DefaultHttpClient 类以默认的请求属性创建一个HttpClient,该类所在的包:org.apache.http.impl.client.DefaultHttpClient. HttpClient是个很不错的开源框架,封装了访问http的请求头、参数、内容体、响应等。

使用步骤:

1、创建Http 客户端对象

2、创建请求对象 

      如果是post,且有上传参数,调用HttpPost的setEntity来设置请求实体

3、执行请求获得响应对象

4、判断状态吗是否等于200

5、如果状态吗等于200,从响应对象中获取响应实体

// 1、创建HttpPost或者HttpGet对象
	HttpPost httpPost = new HttpPost(
			"http://192.168.1.1/login.asp");
	// HttpGet httpGet = new
	// HttpGet("http://192.168.1.1/login.asp");
	// 2、设置POST请求 必须用NameValuePair对象
	List<NameValuePair> params = new ArrayList<NameValuePair>();
	params.add(new BasicNameValuePair("bookname",
			"笑傲江湖"));
	// UrlEncodedFromEntity类中封装了一个List集合,该集合元素是NameValuePair类,用于向服务器发送或从服务器接收数据。
	UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
			params, HTTP.UTF_8);
	// 3、设置POST请求的参数
	httpPost.setEntity(entity);
	// 4、用execute 方法发送POST请求,并返回HttpResponse对象
	HttpResponse httpResponse = new DefaultHttpClient()
			.execute(httpPost);
	if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
		// EntityUtils类是专门用于处理HttpEntity的帮助类,这里是获得返回结果
		String result = EntityUtils
				.toString(httpResponse.getEntity());
		Log.i("TAG", result);// 输出服务器返回来的数据。
	}

注意:Android4.0后,联网操作必须是异步的,不能在UI线程中进行,否则会抛异常。

         android.os.NetworkOnMainThreadException

参考:李宁老师的《Android高薪之路》

           http://www.cnblogs.com/devinzhang/archive/2012/01/17/2325092.html

相关推荐