課程
/移動開發
/Android
/Android-Service系列之斷點續傳下載
老師我也是跟著敲的,但是我下載一半,停止之后,再下載,進度條又從0開始了,咋回事?。?/p>
2015-05-29
源自:Android-Service系列之斷點續傳下載 4-3
正在回答
可能是進度沒有保存起來,或者讀取進度有問題,檢查下
今天剛學,我也碰到了類似的問題。通過debug發現是int溢出了。100*下載進度那里發生了溢出。解決辦法是先將除數和被除數分別都轉換稱double,然后再將運算的結果強制轉換為int。(看下面畫線部分)
????????????????????//下載進度發送廣播給activity?? ??? ??? ??? ??? ??? ?mFinished+=length;?? ??? ??? ??? ??? ??? ?if(System.currentTimeMillis()-time>500){?? ??? ??? ??? ??? ??? ??? ?time = System.currentTimeMillis();?? ??? ??? ??? ??? ??? ??? ?intent.putExtra("finished", (int)(1.00*mFinished*100/(1.00*mFileInfo.getLength())));?? ??? ??? ??? ??? ??? ??? ?mContext.sendBroadcast(intent);?? ??? ??? ??? ??? ??? ?}
沒有將finish存入線程信息中,mThreadDAO.updateThread(mThreadInfo.getUrl(),?? mThreadInfo.getId(), mFinished);
在 download() 方法中,要將 mFileInfo 的finished 參數用數據庫中的數值賦值:
??? public void download() {?? ??? ?// 讀取數據庫的線程信息?? ??? ?List<ThreadInfo> threads = mThreadDAO.getThread(mFileInfo.getUrl());?? ??? ?ThreadInfo threadInfo = null;?? ??? ?if (threads.size() == 0) {?? ??? ??? ??? ??? ??? ?//初始化線程信息?? ??? ??? ?threadInfo = new ThreadInfo(mFileInfo.getId(), mFileInfo.getUrl(),?? ??? ??? ??? ??? ?0, mFileInfo.getLength(),0);?? ??? ?}else{?? ??? ??? ?threadInfo = threads.get(0);?? ??? ??? ?mFileInfo.setFinished(threadInfo.getFinished());? //沒有這步,mFileInfo的finished就是0?? ??? ?}?? ??? ?//創建子線程,進行下載?? ??? ?new Thread(new DownloadThread(threadInfo)).start();?? ?}
LZ找到原因了嗎。我也是
撲通撲通丶我的人生 提問者
舉報
想升職加薪么?本章課程你值得擁有,滿滿的干貨,學起來吧
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-06-02
可能是進度沒有保存起來,或者讀取進度有問題,檢查下
2016-06-08
今天剛學,我也碰到了類似的問題。通過debug發現是int溢出了。100*下載進度那里發生了溢出。解決辦法是先將除數和被除數分別都轉換稱double,然后再將運算的結果強制轉換為int。(看下面畫線部分)
????????????????????//下載進度發送廣播給activity
?? ??? ??? ??? ??? ??? ?mFinished+=length;
?? ??? ??? ??? ??? ??? ?if(System.currentTimeMillis()-time>500){
?? ??? ??? ??? ??? ??? ??? ?time = System.currentTimeMillis();
?? ??? ??? ??? ??? ??? ??? ?intent.putExtra("finished", (int)(1.00*mFinished*100/(1.00*mFileInfo.getLength())));
?? ??? ??? ??? ??? ??? ??? ?mContext.sendBroadcast(intent);
?? ??? ??? ??? ??? ??? ?}
2015-12-16
沒有將finish存入線程信息中,mThreadDAO.updateThread(mThreadInfo.getUrl(),?? mThreadInfo.getId(), mFinished);
在 download() 方法中,要將 mFileInfo 的finished 參數用數據庫中的數值賦值:
??? public void download() {
?? ??? ?// 讀取數據庫的線程信息
?? ??? ?List<ThreadInfo> threads = mThreadDAO.getThread(mFileInfo.getUrl());
?? ??? ?ThreadInfo threadInfo = null;
?? ??? ?if (threads.size() == 0) {
?? ??? ??? ?
?? ??? ??? ?//初始化線程信息
?? ??? ??? ?threadInfo = new ThreadInfo(mFileInfo.getId(), mFileInfo.getUrl(),
?? ??? ??? ??? ??? ?0, mFileInfo.getLength(),0);
?? ??? ?}else{
?? ??? ??? ?threadInfo = threads.get(0);
?? ??? ??? ?mFileInfo.setFinished(threadInfo.getFinished());? //沒有這步,mFileInfo的finished就是0
?? ??? ?}
?? ??? ?//創建子線程,進行下載
?? ??? ?new Thread(new DownloadThread(threadInfo)).start();
?? ?}
2015-08-06
LZ找到原因了嗎。我也是