Android 网络操作常用的两个类
2013-05-20 14:53
351 查看
Android SDK集成了Apache HttpClient模块。要注意的是,这里的Apache HttpClient模块是HttpClient 4.0(org.apache.http.*),而不是常见的 Jakarta Commons HttpClient 3.x(org.apache.commons.httpclient.*)。
HttpClient常用HttpGet和HttpPost这两个类,分别对应Get方式和Post方式。
无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。
1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。
3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。
如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。
下面给出一些实例:
Get方式:
Post方式:
如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。
HttpClient常用HttpGet和HttpPost这两个类,分别对应Get方式和Post方式。
无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。
1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。
3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。
如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。
下面给出一些实例:
Get方式:
// HttpGet方式请求 public static void requestByHttpGet() throws Exception { String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android"; // 新建HttpGet对象 HttpGet httpGet = new HttpGet(path); // 获取HttpClient对象 HttpClient httpClient = new DefaultHttpClient(); // 获取HttpResponse实例 HttpResponse httpResp = httpClient.execute(httpGet); // 判断是够请求成功 if (httpResp.getStatusLine().getStatusCode() == HTTP_200) { // 获取返回的数据 String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8"); Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:"); Log.i(TAG_HTTPGET, result); } else { Log.i(TAG_HTTPGET, "HttpGet方式请求失败"); } }
public String doGet() { String uriAPI = "http://XXXXX?str=I+am+get+String"; String result= ""; // HttpGet httpRequst = new HttpGet(URI uri); // HttpGet httpRequst = new HttpGet(String uri); // 创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。 HttpGet httpRequst = new HttpGet(uriAPI); // new DefaultHttpClient().execute(HttpUriRequst requst); try { //使用DefaultHttpClient类的execute方法发送HTTP GET请求,并返回HttpResponse对象。 HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);//其中HttpGet是HttpUriRequst的子类 if(httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = httpResponse.getEntity(); result = EntityUtils.toString(httpEntity);//取出应答字符串 // 一般来说都要删除多余的字符 result.replaceAll("\r", "");//去掉返回结果中的"\r"字符,否则会在结果字符串后面显示一个小方格 } else httpRequst.abort(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } return result; }
Post方式:
如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。
public String doPost() { String uriAPI = "http://XXXXXX";//Post方式没有参数在这里 String result = ""; HttpPost httpRequst = new HttpPost(uriAPI);//创建HttpPost对象 List <NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("str", "I am Post String")); try { httpRequst.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8)); HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst); if(httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = httpResponse.getEntity(); result = EntityUtils.toString(httpEntity);//取出应答字符串 } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } return result; }
// HttpPost方式请求 public static void requestByHttpPost() throws Exception { String path = "https://reg.163.com/logins.jsp"; // 新建HttpPost对象 HttpPost httpPost = new HttpPost(path); // Post参数 List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("id", "helloworld")); params.add(new BasicNameValuePair("pwd", "android")); // 设置字符集 HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); // 设置参数实体 httpPost.setEntity(entity); // 获取HttpClient对象 HttpClient httpClient = new DefaultHttpClient(); // 获取HttpResponse实例 HttpResponse httpResp = httpClient.execute(httpPost); // 判断是够请求成功 if (httpResp.getStatusLine().getStatusCode() == HTTP_200) { // 获取返回的数据 String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8"); Log.i(TAG_HTTPGET, "HttpPost方式请求成功,返回数据如下:"); Log.i(TAG_HTTPGET, result); } else { Log.i(TAG_HTTPGET, "HttpPost方式请求失败"); } }
相关文章推荐
- 请求对象Android 网络操作常用的两个类
- Android 网络操作常用的两个类
- 【Android Training - Connectivity】基本网络操作 [ Lesson 2 - 管理网络连接的常用方法 ]
- Android开发中4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】
- android下检查网络不通的后续合理人性化操作(常用)
- Android网络框架xUtils的图片处理操作
- android image最常用操作
- android mtk 常用操作命令
- linux常用网络操作命令汇总(2013版)
- android+网络操作详解1
- Android进阶2之Http操作访问网络
- 共享两个做项目最常用功能操作的封装类
- Android的eclipse常用操作详解ZZ
- 共享两个做项目最常用功能操作的封装类 (转载)
- Android开发之WIFI网络操作
- Android开发中常用网络框架例举综合
- Mars Android视频学习笔记——01_23_WIFI网络操作
- 如通过android程序访问网络,比如webservices程序,需要允许程序访问网络,操作如下
- Android Async异步操作实例---加载网络图片(慕课网笔记)