作者簡介 原創(chuàng)微信公眾號(hào)郭霖 WeChat ID: guolin_blog
終于又到周五了,漫長的一周即將結(jié)束桑驱,提前祝大家周末愉快蕾各!
本篇是馬云飛第三篇投稿,分享了他是如何使用OkHttp實(shí)現(xiàn)多文件斷點(diǎn)下載的尾菇,希望能夠幫助到大家。
馬云飛的博客地址:
http://blog.csdn.net/sw950729
正文
話不多說囚枪。這次我主要介紹下okhttp如何實(shí)現(xiàn)多文件斷點(diǎn)下載错沽。參考文章:
http://blog.csdn.net/KevinsCSDN/article/details/51934274
首先,在這邊闡述下我做的過程中所遇到的問題:
如何存儲(chǔ)url對(duì)應(yīng)的當(dāng)前長度以及總長度
如何實(shí)現(xiàn)暫停以及續(xù)傳操作
如何用一個(gè)info對(duì)象實(shí)現(xiàn)多文件的下載
response.body.contentlength與實(shí)際長度不一樣眶拉。(例如我獲取的長度是5.5M但他的實(shí)際長度是6.7M)
如何存儲(chǔ)當(dāng)前長度以及總長度
我在網(wǎng)上看到很多demo對(duì)于這塊是用SQLite實(shí)現(xiàn),我覺得完全可以Shareperference來存儲(chǔ)憔儿,通過 url 來存儲(chǔ)對(duì)應(yīng)的當(dāng)前長度和總長度忆植,有人回說 Shareperference 不是只能一個(gè)建對(duì)應(yīng)一個(gè)值么,兩個(gè)怎么解決谒臼。我們可以通過MD5加密的url來存儲(chǔ)當(dāng)前進(jìn)度朝刊,通過MD2加密來存儲(chǔ)總進(jìn)度。
如何實(shí)現(xiàn)暫停以及續(xù)傳操作
我們可以通過 okhttp 自帶的攔截器來實(shí)現(xiàn)其效果蜈缤,具體代碼如下:
如何用一個(gè)info對(duì)象實(shí)現(xiàn)多文件的下載
其實(shí)在前面我也說了拾氓。用 Shareperference 來實(shí)現(xiàn),具體怎么說的底哥。你的url咙鞍,存儲(chǔ)路徑每次都是需要傳的房官,但是為了防止進(jìn)度沖突(例:明明的A的進(jìn)度,下載B的時(shí)候卻用的A的進(jìn)度)续滋。所以通過傳入的url來用 Shareperference 得到他存儲(chǔ)的 當(dāng)前長度 與 總長度 來解決翰守。
response.body.contentlength 與實(shí)際長度不一樣。
其實(shí)疲酌。蜡峰。。我也不知道朗恳。湿颅。百度了好久。得到的答案是在HTTP協(xié)議中粥诫,消息實(shí)體長度和消息實(shí)體的傳輸長度是有區(qū)別油航,比如說gzip壓縮下,消息實(shí)體長度是壓縮前的長度臀脏,消息實(shí)體的傳輸長度是gzip壓縮后的長度劝堪。還有種說法還有種說法是服務(wù)器限制問題。不解揉稚∶肜玻總之會(huì)導(dǎo)致獲取進(jìn)度的時(shí)候,進(jìn)度值是大于100的搀玖。余境。。
大致的問題和解決方法已經(jīng)說明了灌诅。首先芳来,我們先來看下效果圖。
最后上源碼猜拾,相信你看懂了上面的思路即舌。對(duì)于源碼的理解就不是很難了:
關(guān)于 httpdownloadbean:
就是這幾個(gè)數(shù)據(jù),通過 set 和 get 來設(shè)置和獲取挎袜。
ShareperferenceUtils 是關(guān)于 Shareperference 的工具類顽聂。filesupport 是用來創(chuàng)建文件的。byteutils 可以不必理會(huì)盯仪。
完紊搪。。全景。耀石。。爸黄。滞伟。揭鳞。。诗良。汹桦。。鉴裹。舞骆。。径荔。督禽。。总处。狈惫。。
文章原創(chuàng)作者GuoLin 書籍推薦
郭林大神原創(chuàng)android 書籍:《第一行代碼 android》