標籤:
Android是作為智能手機的作業系統,我們開發的應用,大多數也都須要串連網路,通過網路發送資料、擷取資料,因此作為一個應用開發人員必須熟悉怎麼進行網路訪問與串連。
通常android中進行網路連接通常是使用scoket或者http,http是最多的情況。這裡,我來總結下。怎麼進行http網路訪問操作。
android是採用java語言進行開發的,android的包中包括java的URLConnection和apache 的httpclient,因此我們能夠使用這兩個工具進行網路連接和操作。同一時候。為了控制是否同意程式串連網路,我們開發應用時,須要在Manifest檔案裡配置申請網路連接的許可權,代碼例如以下。
<uses-permission android:name="android.permission.INTERNET"/>
使用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();}
向server提交資料時,須要採用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"));//擷取server響應內容 } 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<BasicNameValuePair>(); 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時一個輕量級的Httpclient,提供的API比較簡單,方便擴充,可是在2.2及曾經版本號碼中,這個API存在一些bug。在2.3的版本號碼中,給改動了。
而HttpClient儘管穩定,bug少,可是其提供的API非常多,進行升級和擴充不方便,android團隊在提升和最佳化其方面的積極性不高。
因此,在Android2.2版本號碼曾經。使用HttpClient時最好的選擇。
Android2.3版本號碼及以後,使用HttpURLConnection時最佳選擇。
架構
網路連接是耗時的操作。通常我們不會將其放在UI線程操作。會編寫非同步線程,將其放在後台線程運行(非同步線程操作看這裡)。
而網上有一些線程的網路操作架構,能夠降低我們的工作量,同一時候我們自己寫的好,可能非常多異常處理之類的。沒有其向的更加全面。
有輕量的android-async-http
Google官方的volley
Square提供的Retrofit
這個能夠依據自己項目的須要選擇不同的架構,有空我來寫寫volley的使用(PS:網上已經有用法了。自己百度去),另外兩個我的串連中已經有用法了。
ok,完畢!
寫的東西不少。可是介紹的不夠具體。
假設不清楚的。歡迎與我交流
原文地址:http://blog.isming.me/blog/2014/05/11/use-network-in-android/,歡迎轉載,轉載請註明出處!
著作權聲明:本文博主原創文章,部落格,未經同意不得轉載。
android網路操作使用匯總(http)