標籤:
webview說在前面
webView控制項,其hi就是向百度發送了一條HTTP請求,伺服器返回百度首頁的代碼發送過來,webview呼叫瀏覽器的核心對它進行解析,呈現出來。
webview已經在後台幫我們處理好了發送HTTP請求、接受服務響應、解析返回資料、以及最終呈現頁面這幾部。封裝的太好了。
HttpURLConnection
四步掌握httpURLConnection
1、獲得HttpURLConnection的執行個體,一般只需new 出一個URL對象,並傳入目標的網路地址。然後openConneciton()獲得執行個體
URL url = new URL("http://www.baidu.com");HttpURLConnection connect = (HttpURLConnection)url.openConnection();
2、佈建要求使用的方法
Get表示希望從伺服器那裡擷取資料。
Post表示則表示希望提交資料給伺服器。
connect.setRequestMethod("GET");
接下來就有一些自由的定製了
連線逾時,讀取逾時
connect.setConnectTimeout(8000);connect.setReadTimeout(8000);
3、再調用getInputStream()就可以擷取伺服器返回的輸入資料流了。剩下的任務是對輸入資料流進行讀取
InputStream in = connect.getInputStream();
...
...
...
4、關閉HTTP串連
connect.disconnect();
總結:發送HTTP請求-->時間長,子線程-->更新UI,非同步訊息處理機制(Message,handler)-->網路許可權
如果要提交資料給伺服器,其實也不複雜,只需要將HTTP的要求方法改成POST,並在擷取輸入資料流之前把資料寫出即可。注意每條資料必須以索引值對存在,資料與資料之間用&符號隔開。
例:向伺服器提交使用者名稱和密碼:
connect.setRequestMethod("POST");DataOutputStream out = new DataOutputStream(connect.getOutputStream);out.wtiteBytes("username=admin&password=123456");
HttpClient
使用HttpClient發送請求、接收響應很簡單,一般需要如下幾步即可。
1. 建立HttpClient對象。建立要求方法的執行個體,首先,它是一個介面,無法對它執行個體化。通常會建立一個DefaultHttpClient();
2. 指定請求URL。如果需要發送GET請求,建立HttpGet對象;如果需要發送POST請求,建立HttpPost對象。
3. 如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對於HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來佈建要求參數。
4. 調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。
5. 調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可擷取伺服器的回應標頭;
調用HttpResponse的getEntity()方法可擷取HttpEntity對象,該對象封裝了伺服器的響應內容。程式可通過該對象擷取伺服器的響應內容。
6. 釋放串連。無論執行方法是否成功,都必須釋放串連
httpGet請求
HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpPost("http://www.baidu.com"); HttpRequest httpRequest = HttpClient.execute(httpGet);
httpPost請求
HttpClient httpClient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action"); // 建立參數隊列 List<namevaluepair> params = new ArrayList<namevaluepair>(); params.add(new BasicNameValuePair("username", "admin")); params.add(new BasicNameValuePair("password", "123456")); //將隊列傳入 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params,"utf-8"); //將構建好的UrlEncodedFormEntity傳入 HttpPost.setEntity(entity); HttpRequest httpResponse = HttpClient.execute(HttpPost);
execute()之後,會返回一個HttpResponse對象。伺服器返回的所有資訊都包含在這裡面,通常情況下我們都會先取出伺服器返回的狀態代碼,如果等於200就說明請求和響應成功了。如下所示:
if(httpResponse.getStatusLine().getStatusCode()==200){ //請求響應成功 HttpEntity entity = response.getEntity(); if (entity != null) { System.out.println("Response content: " + EntityUtils.toString(entity)); //如果有中文,這個會導致亂碼。 System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8")); //這裡可以使用Message對象。發送出去。 } }
Android--HttpURLConnection和HttpClient