1

如果我使用过代码,对话框不显示百分比

    final Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        int total = msg.arg1;
        mProgressDialog.setProgress(total);
        if (total >= 100){
            try {
                mProgressThread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
            mProgressThread.setState(ProgressThread.STATE_DONE);
        }
    }
};

并在线程代码中

while ((count = input.read(data)) != -1) {
                total += count;
                Message msg = mHandler.obtainMessage();
                msg.arg1 = total;
                mHandler.sendMessage(msg);
                output.write(data, 0, count);
            }

怎么了?如果我使用总++;而是总计+=计数;比例提高到 19%,但没有提高到 100%。这是因为文件的下载速度比 while 循环 100 迭代快。如果我使用总 += 计数;它显示 0 但比例为 100% 文件已下载。

4

1 回答 1

1

您似乎没有将任何百分比信息传递给处理程序,而是将读取字符的绝对总数。当你写总++时;您传递了您的读取例程接收数据的次数以及您写入的时间总计 +=count; 你传递了你在完整的阅读过程中读入的所有字符的总数。

如果要显示百分比,则需要从 0-100 传递进度。为此,您需要知道总共将读取多少个字符并写入 total +=count; 并通过 total/CountOfAllCharactersToRead。这样,您将正确地将 %-fraction 分配给 proress 对话框。

只是另一个评论。如果您的阅读程序非常快,则可能会发生 UI 不经常更新的情况,并且您将看不到进度条实际上从 0 运行到 100。

于 2012-04-17T23:31:08.920 回答