Saturday, June 5, 2010

Android和伺服器的親密關係

AndroidInternet的連線,
整合了Apache 4模組,
也因此,要寫出和http協定相關程式並非難事。




HttpPostHttpGet都會發出"伺服器請求",跟伺服器要資料

HttpPost類別發出伺服器請求的步驟:
1.先建立HttpPost實體
 HttpPost a = new HttpPost();
這個類別,能夠以三種建構子建立:
(1)new HttpPost();
(2)new HttpPost(URI uri);
(3)new HttpPost(String uri);
我在這裡用第3
HttpPost hr = new HttpPost("http://localhost:8080/request.txt");
2.使用HttpPost.setEntity()發出伺服器請求
(1)setEntity(HttpEntity entity)當中,
HttpEnitity原來是介面,
也就是說如果要使用這個method
我們必須有一個HttpEnitity底下的實作類別的實體產生,
而這個實作類別,我們使用new UrlEncodedFormEntity。
(2)UrlEncodedFormEntity這個類別的建構子,API裡寫到有2種建構子可以使用:
UrlEncodedFormEntity(Listextends NameValuePair> parameters, String encoding)
註:String encoding是編碼設定,如:UTF_8
(3)要命喔,當我們開始要用NameValuePair時,才發現這個NameValuePair又是介面!
我們只能使用實作NameValuePair這個介面的實作類別BasicNameValuePair
→也就是說,若我們要add List時,
我們被規定了,只能add(new BasicNameValuePair());
(4)BasicNameValuePair這個類別的建構子是這樣的:
當我們在new這個類別時,放入的namevalue
就是我們要丟出的伺服器請求訊息了。

3.當我們將setEntity()這個method的內容都產生出實體了,
自然就可以直接用HttpPost.setEntity()送出實體封包給伺服器了。




●使用HttpResponse實體來接收伺服器的回應
1.先建立HttpResponse實體
使用new DefaultHttpClient().execute(httpPost的變數名稱)去接收伺服器回應
HttpResponse hr = new DefaultHttpClient().excute(hp);
2.判斷伺服器狀態,若為ok,才執行我們要做的指令
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK ){
//程式碼區塊
}
上面的判斷式 HttpStatus.SC_OK可以改成 ==200
3.確認伺服器有給出回應了,我們才來處理接收到的封包
所以程式碼區塊裡的資料可能如下:
String s = EntityUtils.toString(hp.getEntity());
最後再看我們要將s怎麼做處理。
看是要顯示出來,還是$^%

2 comments:

Anonymous said...

大大 你筆記寫得滿不錯的! 謝謝!

Neil Siao said...

很清楚,謝謝!!