Jay*_*Jay 0 java android integer-overflow android-progressbar
我希望这将是一个我想念的傻事,但我一直在敲击键盘试图弄清楚我哪里出错了.
我正在尝试从新线程中的DownloadManager更新ProgressBar.这是正常工作,直到中途,ProgressBar重新开始重新开始.从输入一些调试代码,我已将问题隔离到这一行:
final int dl_progress = (bytes_downloaded*100)/bytes_total;
Run Code Online (Sandbox Code Playgroud)
dl_progress正在通过文件下载中途转为负面!下面的相关代码块和日志输出:
@Override
public void run() {
boolean downloading = true;
while (downloading) {
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(downloadId);
Cursor cursor = manager.query(q);
cursor.moveToFirst();
int bytes_downloaded = cursor.getInt(cursor
.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
int bytes_total = cursor.getInt(cursor
.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
downloading = false;
getActivity().runOnUiThread(new Runnable() {
public void run() {
mProgressBar.setVisibility(View.INVISIBLE);
}
});
}
final int dl_progress = (bytes_downloaded*100)/bytes_total;
Log.d("Download", bytes_downloaded + " of " + bytes_total + " (" + dl_progress + "%)");
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mProgressBar.setProgress((int) dl_progress);
}
});
cursor.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是调试:
D/Download(18228): 7614 of 38577287 (0%)
D/Download(18228): 4226950 of 38577287 (10%)
D/Download(18228): 8578734 of 38577287 (22%)
D/Download(18228): 13207130 of 38577287 (34%)
D/Download(18228): 16539590 of 38577287 (42%)
D/Download(18228): 22287422 of 38577287 (-53%)
D/Download(18228): 28363958 of 38577287 (-37%)
D/Download(18228): 32550806 of 38577287 (-26%)
D/Download(18228): 38577287 of 38577287 (-11%)
Run Code Online (Sandbox Code Playgroud)
我确定这是我在做傻事,但在这种情况下我看不到木头的树木,任何人都可以放光吗?
非常感谢你.
将它们乘以100时,您的值超过Integer的最大值.尝试在int上使用double
中间结果 bytes_downloaded*100溢出的超出了 int (> 2^31-1) 的支持范围,并给您一个负面结果。
您可以使用 long 解决它,并将最终结果转换回 int:
final int dl_progress = (int)((bytes_downloaded*100L)/bytes_total);
| 归档时间: |
|
| 查看次数: |
2084 次 |
| 最近记录: |