老师我也是跟着敲的,但是我下载一半,停止之后,再下载,进度条又从0开始了,咋回事啊?
老师我也是跟着敲的,但是我下载一半,停止之后,再下载,进度条又从0开始了,咋回事啊?
老师我也是跟着敲的,但是我下载一半,停止之后,再下载,进度条又从0开始了,咋回事啊?
2015-05-29
今天刚学,我也碰到了类似的问题。通过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();
}
举报