目前Android平台有三種網路介面可以使用,他們分別是:java.net.*(標準Java介面),org.apache(Apache介面),和android.net.*(android網路介面)。
1 標準Java介面
java.net.*提供與連網有關的類,包括流和資料包通訊端、Internet協議、常見HTTP處理。
比如:建立URL以及URLConnection/HttpURLConnection對象,設定串連參數 ,串連到伺服器 ,向伺服器寫資料 ,從伺服器讀取資料
等通訊。
下面就是常見的使用java.net包的HTTP例子。
try {//定義地址URL url=new URL("http://www.google.com");//開啟串連HttpURLConnection http=(HttpURLConnection)url.openConnection();//得到串連狀態int nRC=http.getResponseCode();if(nRC==HttpURLConnection.HTTP_OK){//取得資料InputStream is = http.getInputStream();//處理資料}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}
注意:由於是串連網路,不免出現一些異常,所以必須處理這些異常。
2 Apache介面
Http協議可能是Internet使用的 最多,最重要的通訊協定了,越來越多的Java應用程式需要通過Http協議來訪問網路資源。雖然JDK的java.net包中已經提供了訪問Http協議的準系統,但是對於大部分應用程式來說,JDK庫提供的功能還遠遠不夠。這就需要Android提供的Apache HttpClient了。
Apache HttpClient 是一個開源項目,彌補了 java.net.* 靈活性不足的缺點,為用戶端的HTTP編程提供高效、最新、功能豐富的工具包支援。
Android 平台引入了 Apache HttpClient 的同時還提供了對它的一些封裝和擴充,例如設定預設的HTTP逾時和緩衝大小等。
早期的 Android 曾同時包括 CommonsHttpClient (org.apache.commons.httpclient.*) 和 HttpComponents (org.apache.http.client.*),不過目前的版本 (1.5) 中開發人員只能使用後者,也就是說類似以下的一些類:
使用這部分介面的基本操作與 java.net.* 基本類似,主要包括: 建立 HttpClient 以及 GetMethod / PostMethod, HttpRequest 等對象 ,設定串連參數 ,執行 HTTP 操作 ,處理伺服器返回結果
//建立HttpClient//這裡使用DefaultHttpClient表示預設屬性HttpClient hc = new DefaultHttpClient();//HttpGet執行個體HttpGet get = new HttpGet("http://www.google.com");//串連try {HttpResponse rp = hc.execute(get);if(rp.getStatusLine().getStatusCode()==HttpStatus.SC_OK){InputStream is = rp.getEntity().getContent();//處理資料}} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
3 Android網路介面
android.net.* 實際上是通過對 Apache 的 HttpClient 的封裝來實現的一個 HTTP 編程介面,同時還提供了 HTTP 要求隊列管理,以及 HTTP 串連池管理,以提高並發請求情況下(如轉載網頁時)的處理效率,除此之外還有網路狀態監視等介面,訪問網路的Socket ,常用的Uri類以及有關WIFI相關的類。
以下是一個通過 AndroidHttpClient 訪問伺服器的最簡例子:
try {/**IP*/InetAddress inetAdderess = InetAddress.getByName("192.168.1.110");/**Port*/Socket client = new Socket(inetAdderess,61203,true);/**取得資料*/InputStream in = client.getInputStream();OutputStream out = client.getOutputStream();/**處理資料*/out.close();in.close();} catch (Exception e) {}