標籤:android style blog http java color
Android從業者,十之八九都是在做網路應用,不是互連網也是區域網路。如今在4G和Wifi的天下下,流量什麼的都已是浮雲,單機應用的市場已然悄悄的一去不複返了。所以呢,不瞭解網路請求的同學要小心了,當心被時代的大浪一個浪頭排在沙灘上。
Android實現網路編程有HTTP、也有Socket。HTTP協議是應用程式層協議,主要解決如何封裝資料,網路應用都會用到的協議;Socket是TCP/IP協議的封裝,主要解決資料如何在網路中傳輸,常用於與伺服器保持長串連,一般用於廣告推送、即時聊天、線上遊戲等。
如果你的工作範圍不涉及到上述這些需求,一般你也用不到Socket。今天我們的主題是android中HTTP請求實現。HTTP要求方法有很多,GET,POST,HEAD,DELETE等,常用的有GET、POST。一般來說,這兩個要求方法也足以解決工作中的需要了,GET用於查詢請求,POST用於提交修改請求。有興趣的同學也可以去網上查查資料,多瞭解瞭解HTTP請求的資料體格式、響應碼,而且最近HTTP協議新的標準也發布了,可以看看。
下面說說GET與POST這兩種請求方式的異同,理解後便於對介面的調用,其實主要也都是背景同學為我們定義好的。簡單點理解,GET是向伺服器擷取資料,POST是向伺服器傳送資料;GET請求是把請求參數以可見的形式拼接到url後面,其實是封裝在header裡面,安全性較低,POST請求是把請求參數放到body中去,使用者看不到執行的過程,安全性較高;GET傳輸資料長度有限制,也就2KB,所以不能用來上傳檔案,而POST請求原則上就沒有限制,但是考慮到網路的穩定性和伺服器的安全性,一般也都給設定上傳檔案的長度閥值,所以常用來上傳檔案。其實GET和POST也是有共同點的,比如說可以通過設定expires屬性,使請求緩衝。
我們Android中實現HTTP請求,原生支援兩種實現方式。一種是JavaSE內建的網路請求類,一種是採納Apache的HttpClient。在Java中有個網路相關的包java.net.*,這個包中封裝了一系列需要用到與網路請求相關的類,比如說HttpURLConnection和URL,基於這兩個類封裝了一個請求工具類;另一種就是HttpClient,被Java開發人員廣泛使用,擁有更加簡單的api和更強的效率,所以才被Google採納在Android的api裡面,相對於HttpURLConnection我也寫了一個工具類,把上個工具類的所有方法都給重新實現了一遍。這兩個工具類基本能滿足日常的工作開發需要,大家有興趣可以到Github上拉取。
下面簡單講解下這兩個網路操作工具類的作用。先看下Javadoc產生的方法概要,由於兩個類的方法是一樣的,只以ApacheHttpUtil來說。考慮到了工具類的多次調用,為了方便和效率,把所有的方法都聲明為static。
GET請求有兩個方法,一個是沒有請求參數的,一個是為了滿足有參數的情況。參數的封裝統一使用Map索引值對的形式,更易理解使用,使用Map也更有效率。ApacheHttpUtil會自動拼裝,你只需把你的請求參數以Map的形式傳過來,然後成功得到伺服器返回的字串結果。
POST請求對外接收的參數是一樣的,首先把Map集合轉成NameValuePair列表,然後塞到Http實體body裡面去,然後成功得到伺服器返回的字串結果。
最後一個方法用在有檔案上傳的時候,支援上傳多個檔案,同時提交文本參數。只需要傳值過來文本參數列表,檔案本地路徑地址清單,這樣就算大功告成了,HttpClient會幫我們封裝一切,實在比Java原生的好用很多倍。想看下原生給人造成的麻煩,就參考NativeHttpUtil這個類裡面的實現吧。
源碼地址:https://github.com/JackCho/AndroidHttpUtil
好了,分享到此結束。幫一個朋友廣告,是一位Android大牛,年紀輕輕的他放棄了30W年薪的優厚待遇,選擇了自己創業全職做Android教育培訓。
詳情請訪問《年薪三十萬,我為什麼要離職。》http://www.cnblogs.com/stay/p/3859211.html
如果覺得對你有所協助,歡迎大家訂閱我的公眾帳號——Android乾貨分享。下面是的二維碼,為你提供及時高質的Android乾貨。