天天看點

OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料

我們這片博文就來聊聊這個反響很不錯的OkHttp了,标題是我惡搞的,本篇将着重詳細的分析,探索OkHttp這個架構的使用和封裝
Android系統提供了兩種HTTP通信類

HttpURLConnection

HttpClient

Google推薦使用HttpURLConnection,這個沒必要多說,事實上,我這篇寫的應該算是比較晚了,很多優秀的博文都已經提出了這些觀點了,那我也就不好意思重複的說廢話了,不過我還是得吐槽一下,HttpURLConnection是在是太難用了,而且功能也實在是太少了,雖然Github上封裝的架構還真是不少,不過依然不是特别好用,而Google自己也在尋求解決的辦法,如果你看過android4.4的源碼,你就應該知道,Google把HttpURLConnection替換成了OkHttp,而OkHttp走到現在,已經是相對來說,比較成熟的架構了,那我們為何不去使用它呢?而且現在學習OkHttp的資料和文章實在是太多了,根本不需要什麼學習成本的,搜尋一下,馬上就有一大堆,既然如此,我們今兒個就來看看這個花姑涼長什麼樣吧!各位小司機,跟着老司機一起上車吧! 注意,我們使用的IDE是Android Studio
肯定要配置一下啦,我們首先建立一個工程——OkHttpGo,這名字好聽,我就不加demo或者test了,這樣顯得有點low,項目我們基于5.0 Lollipop來開發
OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料
而關于OkHttp的官方介紹,大家可以移步這裡

<a href="http://square.github.io/okhttp/">http://square.github.io/okhttp/</a>

OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料
如果想看源碼,可以去Github上

<a href="https://github.com/square/okhttp">https://github.com/square/okhttp</a>

我們既然要使用,就根據github上來吧,加入依賴,把依賴添加到build.gradle中,當然,他是提供jar的,你如果用Eclipse擷取喜歡用jar,你也可以直接下載下傳jar
因為我們會用到圖檔解析,是以可以加上Picasso的依賴,關于它的介紹,可以移步

<a href="http://square.github.io/picasso/">http://square.github.io/picasso/</a>

OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料
這個庫,我下篇博文會介紹到,這裡你隻要知道是這麼添加依賴和使用就可以了
記住,網絡的使用,是需要添權重限的哦!
行,大緻的配置就到這裡OK了,如果你還有什麼不清楚的,可以去他們官網或者github上瞧一瞧,看一看,這裡再送上一下下載下傳jar的位址吧!

<a href="http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&amp;g=com.squareup.okhttp&amp;a=okhttp&amp;v=LATEST">OkHttp 2.7.5 Jar下載下傳</a>

OkHttp内部依賴了Okio,這裡也提供了jar下載下傳位址

<a href="http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&amp;g=com.squareup.okio&amp;a=okio&amp;v=LATEST">Okio 1.8.0 jar下載下傳</a>

我們先從圖檔加載說起,最起碼先定義一下布局呀
非常簡陋的一個布局,就一個button和一個imageview,現在我們就是點選按鈕,然後解析顯示在控件上,這對于OkHttp來說,應該是怎麼使用的呢?注意,現在示範的,都還隻是沒有封裝的前提下,我們首先做一些準備工作
這裡我定義了兩個常量,分别是解析成功失敗的狀态,又定義了一張圖檔的連結,圖檔是網上的以上美女圖檔,好的,這些都準備好了,現在我們就可以來書寫OkHttp相關的類了
可以看到,它使用和Volley有點類似,個人感覺,其實也就是那麼幾個步驟,首先初始化,然後設定一下亂七八糟的屬性,最後添加到隊列中,傳回兩個回調,成功和失敗,是吧,我們這個時候就直接用handler去發消息了
得出來的效果,用一張圖來表示就綽綽有餘了
OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料
OK,圖檔解析的就已經實作了
現在呢,我們可以看到是一個美女的圖檔,但是如果我們圖檔比較大,而我們不需要這麼大,比如長這樣?
OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料
如果我們不想要這麼大的圖檔,又或者說,我們想要一張正方形一樣整齊的圖檔,我們該怎麼去做?還記得我們添加的picasso圖檔架構嗎?他就可以做到,我們可以用它的功能寫一個工具類來幫助我們裁剪,這個工具類寫起來也沒有多麻煩
我們使用的話,就在我們解析成功的時候調用就可以了,
我們可以是這樣的
OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料
正方形就搞定了,歐耶!
事實上,我們上面所說的,都還是有些許繁雜了,畢竟我們不應該重複的去寫這麼多麻煩的代碼,對吧,現在我們來對他進行一個封裝,而對于OkHttp,他有以下的幾個功能

一般的get請求

一般的post請求

基于Http的檔案上傳

檔案下載下傳

加載圖檔

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

支援session的保持

我們要封裝一個OkHttp的話,也就是圍繞着他的這幾個功能來二次開發了,好的,小司機們,我們繼續開車吧!污污污污污….. 我們寫一個OkHttpUtils,其實還算是比較簡單的,因為我們實際上沒寫多少内容
這裡可以看到,我們基本上沒做什麼東西,對吧,隻是把常用的方法都複寫作了一些簡單的操作而已,而且我們的注釋也寫的十分詳細,你需要擴充的話,直接擴充就好了,這樣,我們去驗證一下,xml中加上
好的,什麼初始化的我就不寫出來了,直接看點選事件
可以看到,是不是非常的簡單就OK了。我們隻要定義傳url進入就可以了,而接口,我們使用的是豆瓣的接口
這樣我們可以看下運作結果
OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料OkHttp架構從入門到放棄,解析圖檔使用Picasso裁剪,二次封裝OkHttpUtils,Post送出表單資料
當然,我也是隻提供一種思路罷了,這個封裝類并不完善,還需要你自己根據需求來實施,好的,我這裡也就繼續來優化一下了
前面可以看到,我們已經封裝好了一個工具類,但是并不完善,現在呢,我們就完善的封裝一下,當然,也隻是針對功能點去優化,比如剛才我們隻封裝了一個解析傳回json字元串,現在我們來一個解析直接傳回一個json對象,嘿嘿,怎麼做呢?
跟之前的其實很類似,同樣的,我們可以傳回byte位元組數組
我們也看到了,我們還剩下Bitmap,我們還自帶裁剪功能哦,哈哈
到這裡,基本的get封裝就應該差不多寫完了,但是别忘了,論post的重要性,既然如此,那我們就繼續封裝,首先實作的一個功能
開發中,也是有諸多需要post的地方的,畢竟安全性,傳輸都是個很不錯的選擇,我們繼續寫方法
這裡沒有服務端,是以就不能測試了,我這裡也就教大家怎麼使用就好了,首先xml中定義一個按鈕
我們可以直接看他的點選事件
OK,這樣就送出了表單,這就是一個完整的封裝過程了,如果你問,那我們普通的請求怎麼辦呢?額,你看了這麼久還不熟悉他的套路?我嘴角微微一笑,你的司機之路還很長啊,咳咳,跑題了,如果大家還有什麼疑問的話,可以去鴻洋那裡看看,我相信現在很多的文章都将了很多的基本使用的,是以我也不是想怎麼去講解析json什麼的

<a href="http://blog.csdn.net/lmj623565791/article/details/47911083">Android OkHttp完全解析 是時候來了解OkHttp了</a>

Post送出資料,應該是這樣判斷的
有個!的判斷,在Demo裡面是沒有的,現在及時改正了 本文的Demo我會上傳到CSDN,大家可以下載下傳
如果大家對我有什麼興趣或者對我部落格有興趣,可以加群一起聊聊