在寫Android程式的過程中,碰到要向中央Server取資料時
因寫.net的習慣,所以第一個想到的是WebService。
但Android系列不像一般的Java,它是不支援WebService的。
所以若要使用WebService,就要使用其他的元件來支援
例如KSOAP2 ( ksoap2-j2me-core-2.1.2.jar )
但這個元件在使用上有時會有落漆,且麻煩。
所以又想到另一個Socket元件,但這個元件得在Server上另外開Port
這對網管而言,又不方便,且總不能每寫一支Android程式
就在Server上開一個獨立的Port吧。
所以只好回到另一種原始的元件,HttpPost
這個元件採用Web的表單處理方法,較為簡單
對一般的初學者而言,不難。
只要在Server上寫一頁面去接收處理Client端丟上來Request值就可以了。
例:
WebPage檔案:Hello.aspx
主程式:
String id = Request["id"].ToString(); //接收Client端丟上來的值
Response.Write( id + "您好!" ); //要呈現在頁面上的字串
Response.End(); //將頁面停止輸出,避開自動產生的HTML標記。
網址測試=>http://127.0.0.1/Hello.aspx?id=Frank
頁面輸出如下:
Frank您好!
Android檔案:Hello.java
import如下:
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpPost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
方法:
public String getHello(){
String str = " ";
String url = "http://127.0.0.1/Hello.aspx" ;
HttpPost httppost = new HttpPost( url ) ; //宣告要使用的頁面
List <NameValuePair> params = new ArrayList <NameValuePair> ( ) ; //宣告參數清單
params.add ( new BasicNameValuePair ( "id" , "Frank" ) ) ; //加入參數定義
try //因Java的規定,所以從這開始要用try..catch
{
httppost.setEntity ( new UrlEncodedFormEntity ( params , HTTP.UTF_8 ) ) ; //設定參數和編碼
HttpResponse res = new DefaultHttpClient () . execute ( httppost ) ; //執行並接收Server回傳的Page值
if ( res.getStatusLine( ) .getStatusCode( ) == 200 ) //判斷回傳的狀態是不是200
str = EntityUtils.toString( res.getEntity( ) ) ; //取出Server回傳的Code:「Frank您好!」
}
catch(Exception e)
{ }
return str;
}
使用上面的方法,就可以從Web網頁上取得想要的資料。
同時可以配合JSON使用,效果會更佳更方便。
讓.net頁面輸出JSON字串,再從Android端把從HttpPost接收到的回傳值
丟進JSONObject或是JSONArrayList分析處理
就可以進行一種類似XML分析處理一般的動作
減少還要寫一堆分析字串的程式。
留言列表