天天看點

Android 網絡請求詳解

我們知道大多數的 android 應用程式都是通過和伺服器進行互動來擷取資料的。如果使用 http 協定來發送和接收網絡資料,就免不了使用 httpurlconnection 和 httpclient,而 android 中主要提供了上述兩種方式來進行 http 操作。并且這兩種方式都支援 https 協定、以流的形式進行上傳和下載下傳、配置逾時時間、ipv6、以及連接配接池等功能。

但是 googl e釋出 6.0 版本的時候聲明原生剔除 httpclient,但是筆者認為 httpclient 會提供相應的 jar 包做支援,畢竟 google 對向下相容這方面一直都做的很好,相信在選擇網絡功能的時候我們會選自己喜歡的方法。

接着我們來看一下如何使用 httpurlconnection 來處理簡單的網絡請求。

由于 google 已經表明了推薦廣大開發者使用 httpurlconnection,那麼想必是有一定原因的。

xutils3

這裡就推薦大夥都很熟悉的開源項目 xutils 的“弟弟“,xutils3。xutils 包含了 view 注入,圖檔處理,資料庫操作以及網絡請求封裝,xutils 使用的網絡請求封裝是基于 httpclient 的。xutils3 使用的網絡請求是基于 httpurlconnection,我們着重說明一下xutils3。

具有 cache 功能

post請求直接更改 post 方式,以及需要送出的參數即可,篇幅問題這裡就不在一一列舉了。通過以上代碼可以看到,我們在使用 xutils 來請求網絡的時候會非常的友善,隻用在回調函數裡面做對應的代碼邏輯處理即可,不用關心線程問題,極大的解放了我們的生産力。

android stuido gradle使用方法如下:

volley

在 android 2.3 及以上版本,使用的是 httpurlconnection,而在android 2.2 及以下版本,使用的是 httpclient。鑒于現在的手機行業發展速度,我們已經不考慮 android2.2 了。

簡單提供一些 volley 的執行個體:

當然我們也可以定制自己的 request

同樣,我們來看一下 httpclient 的簡單請求。

httpclient 也擁有這大量優秀的開源工程,afinal、xutils 以及asynchttpclient,也可以為廣大開發者提供已經造好的輪子。由于xutils 是基于 afinal 重寫的,現在 xutils3 也有替代 xutils 的趨勢,是以我們在這就簡單介紹一下 asynchttpclient。

asynchttpclient

見名知意,asynchttpclient 對處理異步 http 請求相當擅長,并通過匿名内部類處理回調結果,http 異步請求均位于非 ui 線程,不會阻塞 ui 操作,通過線程池處理并發請求處理檔案上傳、下載下傳、響應結果自動打包 json 格式。使用起來會很友善。

經過上面的代碼發現,asynchttpclient 使用起來也是異常簡潔,主要靠回調方法來處理成功或失敗之後的邏輯。仔細想想,xutils 的處理方式和這個處理方式很類似,看來好用設計還是很受人青睐的。

如果兩種網絡請求都想使用怎麼辦?那麼 okhttp 是一個最佳解決方案了。

okhttp 在網絡請求方面的口碑很好,就連 google 自己也有使用okhttp。雖然 google6.0 中剔除了 httpclient 的 api,但是由于okhttp 的影響力以及其強大的功能,使用 okhttp 無需重寫您程式中的網絡代碼。同時最重要的一點 okhttp 實作了幾乎和java.net.httpurlconnection 一樣的 api。如果您用了 apache httpclient,則 okhttp 也提供了一個對應的 okhttp-apache 子產品。足以說明 okhttp 的強大,下面是一些例子。

一般的 get 請求

一般的 post 請求

基于 http 的檔案上傳

檔案下載下傳

加載圖檔

支援請求回調,直接傳回對象、對象集合

支援 session 的保持

簡單代碼執行個體

android studio gradle 使用方式:

compile 'com.squareup.okhttp:okhttp:2.7.0'

android 開發應用少不了使用網絡,移動互聯時代,搶占終端入口變得異常重要,那麼我們在開發過程中,不管使用哪一種網絡請求,httpurlconnection 或者是 httpclient,都可以滿足我們和伺服器的溝通。

可是釋出的 app 到使用者手中後,有用 wifi 的,有用流量的,網絡環境多樣,我們怎麼能知道使用者在什麼樣的情況下通路伺服器的流暢度呢?

答案很簡單,隻要內建了oneapm mobile insight,即可輕松知曉網絡互動情況,輕松了解使用者在使用app的過程中哪裡容易出問題,并對症下藥。

oneapm mobile insight ,監控網絡請求及網絡錯誤,提升使用者留存。通路 oneapm 官方網站感受更多應用性能優化體驗,想閱讀更多技術文章,請通路 oneapm 官方技術部落格。

本文轉自 oneapm 官方部落格