Android HttpClient(Get,Post方式)進行網絡通信

前言
         歡迎大家我分享和推薦好用的代碼段~~
聲明
         歡迎轉載,但請保留文章原始出處:
         CSDN
http://www.csdn.net
         雨季o莫憂離:http://blog.csdn.net/luckkof

正文

 

要使用HttpClient,需要了解一些類:

1、ClientConnectionManager接口:該接口是客戶端連接管理器接口,主要提供以下幾個抽象方法:

ClientConnectionManager(關閉所有無效超時的連接)、closeIdleConnection(關閉空閒的連接)、releaseConnection(釋放一個連接)、requestConnection(請求一個新的連接)、shutdown(關閉管理器並且釋放資源)

2、DefaultHttpClient:一個默認的Http客戶端,我們可以使用它來創建一個Http連接,代碼如下:

[java] view plaincopy
  1. HttpClient httpClient = new DefaultHttpClient();  

3、HttpResponse:是一個Http連接相應,當執行一個Http連接後,就會返回一個HttpResponse,可以通過HttpResponse獲得一些響應信息。下面是一個請求Http連接並且獲得該請求是否成功的代碼:

[java] view plaincopy
  1. HttpResponse httpResponse = httpClient.execute(httpGet);  
  2.             if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
  3.                 //連接成功  
  4.             }  

通過上面幾個類的連接,下面將分別使用Get和Post方式請求一個網頁。

其中有兩個資源文件,兩個jsp的內容分別如下:
http.jsp
[html] view plaincopy
  1. <html>  
  2.   <head>   
  3.     <title>My JSP 'index.jsp' starting page</title>  
  4.   </head>  
  5.   <body>  
  6.     <%  
  7.         out.println("<h1>HTTP TEST<br/>http test</h1>");  
  8.      %>  
  9.   </body>  
  10. </html>  
httpGet.jsp
[html] view plaincopy
  1. <html>  
  2.   <head>  
  3.     <title>My JSP 'index.jsp' starting page</title>  
  4.   </head>   
  5.   <body>  
  6.     <%  
  7.         String type = request.getParameter("par");  
  8.         String result = new String(type.getBytes("iso-8859-1"),"gb2312");  
  9.         out.println("<h1>parameters:"+result+"</h1>");  
  10.      %>  
  11.   </body>  
  12. </html>  

先看看HttpClient中如何使用Get方式獲取數據,這裏需要使用HttpGet來構建一個Get方式的Http請求,然後通過HttpClient來執行這個請求,HttpResponse在收到這個請求後給出響應,最後通過“httpResponse.getStatusLine().getStatusCode()”來判斷請求是否成功,並且處理,具體代碼如下:

[java] view plaincopy
  1. public class GetActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         // TODO Auto-generated method stub  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.http);  
  7.         TextView textView = (TextView)findViewById(R.id.text);  
  8.           
  9.         String httpUrl = "http://59.64.158.106:8080/test/http.jsp";  
  10.         //HttpGet對象  
  11.         HttpGet httpGet = new HttpGet(httpUrl);  
  12.         try{  
  13.             //取得HttpClient對象  
  14.             HttpClient httpClient = new DefaultHttpClient();  
  15.             //請求HttpClient,取得HttpResponse  
  16.             HttpResponse httpResponse = httpClient.execute(httpGet);  
  17.             //請求成功  
  18.             if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
  19.                 //取得返回的字符串  
  20.                 String strResult = EntityUtils.toString(httpResponse.getEntity());  
  21.                 textView.setText(strResult);  
  22.             }else{  
  23.                 textView.setText("請求錯誤");  
  24.             }  
  25.         }catch (ClientProtocolException e) {  
  26.             // TODO: handle exception  
  27.             Log.e("GetActivity""ClientProtocolException");  
  28.             e.printStackTrace();  
  29.         }catch (IOException e) {  
  30.             // TODO: handle exception  
  31.             Log.e("GetActivity""IOException");  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  
  35. }  

Post方法則比Get方法稍微複雜一點。首先使用HttpPost來構建一個Post方式的請求,然後需要使用NameValuePair來保存要傳遞的參數,還需要設置所使用的字符集,最後就和Get方式一樣通過HttpClient來請求這個鏈接,返回響應並且處理,下面是一個例子:

[java] view plaincopy
  1. public class PostActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.http);  
  6.         TextView textView = (TextView)findViewById(R.id.text);  
  7.         //http地址  
  8.         String httpUrl = "http://59.64.158.106:8080/test/httpGet.jsp";  
  9.         //httpPost連接對象  
  10.         HttpPost httpPost = new HttpPost(httpUrl);  
  11.         //使用NameValuePair來保存要傳遞的post闡述  
  12.         List<NameValuePair> params = new ArrayList<NameValuePair>();  
  13.         //添加要傳遞的參數  
  14.         params.add(new BasicNameValuePair("par""HttpClient_android_post"));  
  15.         try{  
  16.             //設置字符集  
  17.             HttpEntity httpEntity = new UrlEncodedFormEntity(params, "gb2312");  
  18.             httpPost.setEntity(httpEntity);  
  19.             //取得默認的HttpClient  
  20.             HttpClient httpClient = new DefaultHttpClient();  
  21.             //取得HttpResponse  
  22.             HttpResponse httpResponse = httpClient.execute(httpPost);  
  23.             //HttpStatus.SC_OK)表示連接成功  
  24.             if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
  25.                 //取得返回的字符串  
  26.                 String result = EntityUtils.toString(httpResponse.getEntity());  
  27.                 textView.setText(result);  
  28.             }else{  
  29.                 textView.setText("請求錯誤");  
  30.             }  
  31.         }catch (ClientProtocolException e) {  
  32.             Log.e("PostActivity""ClientProtocolException");  
  33.             e.printStackTrace();  
  34.         }catch (IOException e) {  
  35.             Log.e("PostActivity""IOException");  
  36.             e.printStackTrace();  
  37.         }  
  38.     }  
  39. }  
發佈了128 篇原創文章 · 獲贊 10 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章