android上網 2,使用HttpClient傳輸

一 。使用HttpClient 進行GET鏈接php

  1. 新建 URIjava

  2. 新GET  請求數據結構

  3. 新建 HTTP 客戶端post

  4. 使用客戶端執行操做編碼

  5. 返回處理的結果 url

1. URI,這裏的URI並非URI類,而是String類型的uri字符。spa

String uri = "http://";

2.  新建 GET 請求code

只要用HttpGet類就能夠了orm

HttpGet.HttpGet (String uri );

3. 新建 Http 客戶端對象

通常使用默認的就能夠了

 DefaultHttpClient.DefaultHttpClient ()

4. 使用客戶端執行請求

  HttpClient.execute (HttpUriRequest request ) throws IOException ,ClientProtocolException

這個 方法返回的是HttpResponse類型,也就是響應、。

5. 處理響應

獲得了HttpResponse後,在網格上的就完成 了,如今在本地進行響應處理。

HttpResponse.getStatusLine () ;//獲得狀態行
HttpResponse.getEntity () ;// 獲得結果

例子:

protected void doGet() {
		// TODO Auto-generated method stub
		//新建 URL
		String url="http://5billion.com.cn/post.php?name=abcd";
		//新建 GET 請求
		HttpGet httpRequest = new HttpGet (url );
		//新建 http客戶端
		HttpClient httpClient = new DefaultHttpClient ();
		//執行請求返回結果 
		try {
			HttpResponse httpResponse = httpClient.execute(httpRequest);
			//判斷結果 
			if (httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				//獲得結果 的類型
				String result = EntityUtils.toString(httpResponse.getEntity());
				textView.setText(result);
			}else {
				textView.setText("應答錯誤  :"+httpResponse.getStatusLine().toString());
			}
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}



二。使用HttpCLient進行POST鏈接

    使用POST鏈接與GET鏈接不一樣的地方參數 的傳遞。在POST中,參數 的傳遞用 NameValuePair 類,實質也就是HashMap。

     POST與GET不一樣的地方 在於請求的創建

1 。新建 HttpPost請求

HttpPost.HttpPost( String uri );

2.  新建 保存參數的數據 結構 

在POST中傳遞的是NameValuePair類,僅僅保存一個確定是不夠的,因此真正傳遞的是一個列表,表中每個對象 都是一個NameValuePair。以下

新建 一個列表 來保存NameValuePair。

 List<NameValuePair> params = new ArrayList <NameValuePair >();
 //新建真正 的數據 ,以名值 對的形式保存
 BasicNameValuePair.BasicNameValuePair (String name ,String value );
 //將名值 對加入 到列表 中
 List.add(NameValuePair  object);

3. 爲參數 設置編碼 方式 

最後將以前 新建 好的List對象 加入 到HttpPost對象 中

UrlEncodedFormEntity.UrlEncodedFormEntity (List <?extends NameValuePair>parameters ,String encoding )throws UnsupportedEncodingException

第一個參數 是要編碼 的參數 ,第二個是設置編碼 的方式 ,能夠使用HTTP.UTF_8,  HTTP,UTF_16


4. 將參數 加入 到請求中

HttpEntityEnclosingRequestBase.setEntity (HttpEntity entity );

接下來的工做就同樣了

5.新建 http客戶端

DefaultHttpClient.DefaultHttpClient ()

6. 使用客戶端執行操做

HttpClient.execute (HttpUriRequest request ) throws IOException ,ClientProtocolException

7 處理響應

這裏的處理要按應用的要求 來處理,如將結果以String 顯示 

String result - ENtityUtils.toString (httpReqsponse.getEntity());
tv.setText (result );

例子

protected void doPost() {
		// TODO Auto-generated method stub
		//新建 一個URL
		String url ="http://www.baidu.com";
		//新建 POST類請求
		HttpPost httpRequest = new HttpPost(url );
		//新建 要傳遞的數據結構 
		List <NameValuePair>params = new ArrayList <NameValuePair >();
		//新建 鍵值對
		BasicNameValuePair pair1 = new BasicNameValuePair ("param","AaBbCcDdEe");
		//將數據 加入 到鍵值 對中
		params.add(pair1);
		
		try {
			//設置編碼 方式 
			HttpEntity entity = new UrlEncodedFormEntity (params ,HTTP.UTF_8);
			httpRequest.setEntity(entity);
			//新建 http客戶端
			HttpClient httpClient = new DefaultHttpClient ();
			//執行請求,獲得響應
			HttpResponse httpResponse = httpClient .execute(httpRequest );
			//判斷響應狀態 是否成功
			if (httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				String result = EntityUtils.toString(httpResponse.getEntity());
				textView.setText(result);
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
相關文章
相關標籤/搜索