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