在寫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分析處理一般的動作

減少還要寫一堆分析字串的程式。

 

 

 

 

 

arrow
arrow
    全站熱搜

    Jiang Ying-Fu 發表在 痞客邦 留言(1) 人氣()