Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中網絡操作使用總結(http)

android中網絡操作使用總結(http)

編輯:關於Android編程

Android是作為智能手機的操作系統,我們開發的應用,大多數也都需要連接網絡,通過網絡發送數據、獲取數據,因此作為一個應用開發者必須熟悉怎麼進行網絡訪問與連接。通常android中進行網絡連接一般是使用scoket或者http,http是最多的情況,這裡,我來總結下,怎麼進行http網絡訪問操作。

android是采用java語言進行開發的,android的包中包含java的URLConnection和apache 的httpclient,因此我們可以使用這兩個工具進行網絡連接和操作。同時,為了控制是否允許程序連接網絡,我們開發應用時,需要在Manifest文件中配置申請網絡連接的權限,代碼如下。

使用URLConnection連接網絡

URLConnection為java.net包中提供的網絡訪問,支持http,https,ftp等,進行http連接時,使用HttpURLConnection即可,示例代碼如下:

URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
    InputStream in = new BufferedInputStream(urlConnection.getInputStream());
    readStream(in);   //該方法是我們自己寫的,從流中取數據保存到本地,實現從網絡獲取數據。
finally {
    urlConnection.disconnect();
}

向服務器提交數據時,需要采用POST傳輸

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
    urlConnection.setDoOutput(true);    //設置可以上傳數據
    urlConnection.setChunkedStreamingMode(0);

    OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
    writeStream(out);   //該方法時我們自己寫的,向輸出流中寫數據,實現數據上傳。

    InputStream in = new BufferedInputStream(urlConnection.getInputStream());
    readStream(in);
finally {
    urlConnection.disconnect();
}

更多使用方法和函數請查看:http://developer.android.com/reference/java/net/HttpURLConnection.html

同時HttpsURLConnection的使用方法請查看:http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html

使用HttpClient

這個呢,我們也可以使用AndroidHttpClient頁可以使用apache默認的DeafultHttpClient,兩者之間僅僅常見Client不同,其他都一樣

創建AndroidHttpClient

AndroidHttpClient httpClient = AndroidHttpClient.newInstance("user-agent");

創建DefaultHttpClient

HttpClient client = new DefaultHttpClient();

GET請求

HttpGet getRequest = new HttpGet("http://blog.isming.me");
try {  
    HttpResponse response = httpClient.execute(getMethod); //發起GET請求  

    Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼  
    Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取服務器響應內容  
} catch (ClientProtocolException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
} catch (IOException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}

發起POST請求:

//先將要傳的數據放入List  
params = new LinkedList();  
params.add(new BasicNameValuePair("param1", "Post方法"));  
params.add(new BasicNameValuePair("param2", "第二個參數"));  

try {  
    HttpPost postMethod = new HttpPost(baseUrl);  
    postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中  

    HttpResponse response = httpClient.execute(postMethod); //執行POST方法  
    Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼  
    Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容  

} catch (UnsupportedEncodingException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
} catch (ClientProtocolException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
} catch (IOException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}

說明

從上面看到,使用HttpClient更加方便,明了。不過Android官方給我們的文檔說明是建議android2.2及以下版本建議使用HttpClient,android2.3及以上版本建議使用HttpURLConnection。

原因是HttpURLConnection時一個輕量級的Http客戶端,提供的API比較簡單,方便擴展,但是在2.2及以前版本中,這個API存在一些bug,在2.3的版本中,給修改了。

而HttpClient雖然穩定,bug少,但是其提供的API很多,進行升級和擴展不方便,android團隊在提升和優化其方面的積極性不高。

因此,在Android2.2版本以前,使用HttpClient時最好的選擇。
Android2.3版本及以後,使用HttpURLConnection時最佳選擇。

框架

網絡連接是耗時的操作,通常我們不會將其放在UI線程操作,會編寫異步線程,將其放在後台線程執行(異步線程操作看這裡)。

而網上有一些線程的網絡操作框架,可以減少我們的工作量,同時我們自己寫的好,可能很多異常處理之類的,沒有其向的更加全面。

有輕量的android-async-http
谷歌官方的volley
Square提供的Retrofit

這個可以根據自己項目的需要選擇不同的框架,有空我來寫寫volley的使用(PS:網上已經有使用方法了,自己百度去),另外兩個我的連接中已經有使用方法了。

ok,完成!
寫的東西不少,但是介紹的不夠詳細。如果不清楚的,歡迎與我交流

原文地址:http://blog.isming.me/blog/2014/05/11/use-network-in-android/,歡迎轉載,轉載請注明出處!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved