gpt4 book ai didi

java - 为什么我在 Android SDK 中计算的百分比变成负值?

转载 作者:行者123 更新时间:2023-12-01 06:39:28 25 4
gpt4 key购买 nike

我希望这将是一件我错过的愚蠢的事情,但我一直在用头撞键盘试图找出我哪里出错了。

我正在尝试从新线程中的下载管理器更新进度栏。这可以正常工作,直到大约一半,进度条重置回开始处。通过放入一些调试代码,我已将问题隔离到这一行:

final int dl_progress = (bytes_downloaded*100)/bytes_total;

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();
}

}

这是调试:

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%)

我确信我在做一些愚蠢的事情,但在这种情况下我看不到树木,有人可以提供任何线索吗?

谢谢您。

最佳答案

bytes_downloaded*100 的中间结果溢出了 int 的支持范围 (> 2^31-1),并给出了负结果。

您可以通过使用 long 并将最终结果转换回 int 来解决它:

最终 int dl_progress = (int)((bytes_downloaded*100L)/bytes_total);

关于java - 为什么我在 Android SDK 中计算的百分比变成负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com