okhttp如何實現(xiàn)多文件斷點下載

轉(zhuǎn)載
馬云飛 的博客地址:
http://blog.csdn.net/sw950729

正文

話不多說。這次我主要介紹下okhttp如何實現(xiàn)多文件斷點下載。參考文章:
http://blog.csdn.net/KevinsCSDN/article/details/51934274

首先,在這邊闡述下我做的過程中所遇到的問題:
如何存儲url對應的當前長度以及總長度

如何實現(xiàn)暫停以及續(xù)傳操作

如何用一個info對象實現(xiàn)多文件的下載

response.body.contentlength與實際長度不一樣。(例如我獲取的長度是5.5M但他的實際長度是6.7M)

如何存儲當前長度以及總長度
我在網(wǎng)上看到很多demo對于這塊是用 **SQLite **實現(xiàn),我覺得完全可以 Shareperference 來存儲,通過 url 來存儲對應的 當前長度總長度,有人回說 Shareperference 不是只能一個建對應一個值么,兩個怎么解決。我們可以 通過MD5加密的url來存儲當前進度,通過MD2加密來存儲總進度
如何實現(xiàn)暫停以及續(xù)傳操作
我們可以通過 okhttp 自帶的攔截器來實現(xiàn)其效果,具體代碼如下:


如何用一個info對象實現(xiàn)多文件的下載
其實在前面我也說了。用 Shareperference 來實現(xiàn),具體怎么說的。你的url,存儲路徑每次都是需要傳的,但是為了防止進度沖突(例:明明的A的進度,下載B的時候卻用的A的進度)。所以通過傳入的url來用 Shareperference 得到他存儲的 當前長度 與 總長度 來解決。
response.body.contentlength 與實際長度不一樣。
其實。。。我也不知道。。百度了好久。得到的答案是在HTTP協(xié)議中,消息實體長度和消息實體的傳輸長度是有區(qū)別,比如說gzip壓縮下,消息實體長度是壓縮前的長度,消息實體的傳輸長度是gzip壓縮后的長度。還有種說法還有種說法是服務器限制問題。不解??傊畷е芦@取進度的時候,進度值是大于100的。。。
大致的問題和解決方法已經(jīng)說明了。首先,我們先來看下效果圖。

最后上源碼,相信你看懂了上面的思路。對于源碼的理解就不是很難了:






關于 httpdownloadbean:



就是這幾個數(shù)據(jù),通過 set 和 get 來設置和獲取。
ShareperferenceUtils 是關于 Shareperference 的工具類。filesupport 是用來創(chuàng)建文件的。byteutils 可以不必理會。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容