天天看點

okgo網絡請求架構的實作

第一步:添加依賴:

第二步: 建立HttpManager:示例:

第三步:建立JsonParseUtil:

第四步建立:HttpStringResponseHandler

第五步,代碼中使用:

示例2:圖檔上傳:

檔案下載下傳OkDownload

OkGo與OkDownload的差別就是,OkGo隻是簡單的做一個下載下傳功能,不具備斷點下載下傳,暫停等操作,但是這在很多時候已經能滿足需要了。

而有些app需要有一個下載下傳清單的功能,就像迅雷下載下傳一樣,每個下載下傳任務可以暫停,可以繼續,可以重新下載下傳,可以有下載下傳優先級,這時候OkDownload就有用了。

結合OkGo的request進行網絡請求,支援與OkGo保持相同的配置方法和傳參方式

支援斷點下載下傳,支援突然斷網,強殺程序後,繼續斷點下載下傳

每個下載下傳任務具有無狀态、下載下傳、暫停、等待、出錯、完成共六種狀态

所有下載下傳任務按照tag區分,切記不同的任務必須使用不一樣的tag,否者斷點會發生錯亂

相同的下載下傳url位址,如果使用不一樣的tag,也會認為是兩個下載下傳任務

不同的下載下傳url位址,如果使用相同的tag,會認為是同一個任務,導緻斷點錯亂

預設同時下載下傳數量為3個,預設下載下傳路徑<code>/storage/emulated/0/download</code>,下載下傳路徑和下載下傳數量都可以在代碼中配置

下載下傳檔案名可以自己定義,也可以不傳,讓架構自動擷取檔案名

簡單實作代碼:

建構一個下載下傳請求Request,這個建構方法和OkGo是一樣的,params參數和headers參數是隻是示範使用,一切OkGo的使用方法,這裡都是一樣的。

建構下載下傳任務,使用OkDownload中的request方法,傳入一個tag和我們上一步建立的request對象,建立出下載下傳任務,其他的方法我們下文在細講。

啟動任務,我們已經得到了DownloadTask任務對象,那麼簡單調用start啟動他就好了,同時他還支援這麼幾個方法:

start():開始一個新任務,或者繼續下載下傳暫停的任務都是這個方法

pause():将一個下載下傳中的任務暫停

remove():移除一個任務,無論這個任務是在下載下傳中、暫停、完成還是其他任何狀态,都可以直接移除這個任務,他有一個重載方法,接受一個boolen參數,true表示删除任務的時候同時删除檔案,false表示隻删除任務,但是檔案保留在手機上。不傳的話,預設為false,即不删除檔案。

restart():重新下載下傳一個任務。重新下載下傳會先删除以前的任務,同時也會删除檔案,然後從頭開始重新下載下傳該檔案。

Request的建構詳細參考OkGo的用法,這裡重點介紹DownloadTask的建構,這裡面的方法一個個介紹:

request():靜态方法建立DownloadTask對象,接受兩個參數,第一個參數是tag,表示目前任務的唯一辨別,就像介紹中說的,所有下載下傳任務按照tag區分,不同的任務必須使用不一樣的tag,否者斷點會發生錯亂,如果相同的下載下傳url位址,如果使用不一樣的tag,也會認為是兩個下載下傳任務,不同的下載下傳url位址,如果使用相同的tag,也會認為是同一個任務,導緻斷點錯亂。切記,切記!!

priority():表示目前任務的下載下傳優先級,他是一個int類型的值,隻要在int的大小範圍内,數值越大,優先級越高,也就會優先下載下傳。當然也可以不設定,預設優先級為0,當所有任務優先級都一樣的時候,就會按添加順序下載下傳。

floder():單獨指定目前下載下傳任務的檔案夾目錄,如果你是6.0以上的系統,記得下載下傳的時候先自己擷取sd卡的運作時權限,否則檔案夾建立不成功,無法下載下傳。當然也可以不指定,預設下載下傳路徑<code>/storage/emulated/0/download</code>。

fileName():手動指定下載下傳的檔案名,一般來說是不需要手動指定的,也建議不要自己指定,除非你明确知道你要下載下傳的是什麼,或者你想改成你自己的檔案名。如果不指定,檔案名将按照以下規則自動擷取,擷取規則與OkGo檔案下載下傳擷取規則一緻,點選這裡檢視。

extra():這個方法相當于資料庫的擴充字段,我們知道我們斷點下載下傳是需要儲存下載下傳進度資訊的,而我們這個架構是儲存在資料庫中,資料庫的字段都是寫死的,如果使用者想在我們的下載下傳資料庫中儲存自己的資料就做不到了,是以我們這裡提供了三個擴充字段,允許使用者儲存自己想要的資料,如果不需要的話,也不用調用該方法。

register():這是個注冊監聽的方法,我們既然要下載下傳檔案,那麼我們肯定要知道下載下傳的進度和狀态是吧,就在這裡注冊我們需要的監聽,監聽可以注冊多個,同時生效,當狀态發生改變的時候,每個監聽都會收到通知。當然如果你隻是想下載下傳一個檔案,不關心他的回調,那麼你不用注冊任何回調。