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

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

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

<uses-permission android:name="android.permission.INTERNET"/> 

使用URLConnection連接網(wǎng)絡

URLConnection為java.net包中提供的網(wǎng)絡訪問,支持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);   //該方法是我們自己寫的,從流中取數(shù)據(jù)保存到本地,實現(xiàn)從網(wǎng)絡獲取數(shù)據(jù)。
finally {
    urlConnection.disconnect();
}

向服務器提交數(shù)據(jù)時,需要采用POST傳輸

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

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

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

更多使用方法和函數(shù)請查看: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不同,其他都一樣

創(chuàng)建AndroidHttpClient

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

創(chuàng)建DefaultHttpClient

HttpClient client = new DefaultHttpClient();

GET請求

HttpGet getRequest = new HttpGet("http://blog.isming.me");
try {  
    HttpResponse response = httpClient.execute(getMethod); //發(fā)起GET請求  
  
    Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼  
    Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取服務器響應內(nèi)容  
} catch (ClientProtocolException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
} catch (IOException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}  

發(fā)起POST請求:

//先將要傳的數(shù)據(jù)放入List  
params = new LinkedList<BasicNameValuePair>();  
params.add(new BasicNameValuePair("param1", "Post方法"));  
params.add(new BasicNameValuePair("param2", "第二個參數(shù)"));  
              
try {  
    HttpPost postMethod = new HttpPost(baseUrl);  
    postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數(shù)填入POST Entity中  
                  
    HttpResponse response = httpClient.execute(postMethod); //執(zhí)行POST方法  
    Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼  
    Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內(nèi)容  
                  
} 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雖然穩(wěn)定,bug少,但是其提供的API很多,進行升級和擴展不方便,android團隊在提升和優(yōu)化其方面的積極性不高。

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

框架

網(wǎng)絡連接是耗時的操作,通常我們不會將其放在UI線程操作,會編寫異步線程,將其放在后臺線程執(zhí)行(異步線程操作看這里)。

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

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

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容