2

我有一个进度对话框,显示使用字节作为进度单位下载我的文件我想将进度单位转换为兆字节

public void initializeDialog()
    {
        this.pDialog = new ProgressDialog(act);
        this.pDialog.setMessage("Download");
        this.pDialog.setIndeterminate(false);
        this.pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        this.pDialog.setCancelable(true);
    }

    public AsynchTest() {
        initializeDialog();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

pDialog.setProgressNumberFormat("%1d MB / %2d MB");
        pDialog.show();
        pDialog.setProgress(0);

    }

    @Override
    protected Void doInBackground(Void... params) {

        downloadContent();
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {


        pDialog.incrementProgressBy((int) byteToMB(progress[0]));
    }

    @Override
    protected void onPostExecute(Void result) {
        pDialog.dismiss();

    }

我使用此函数将字节转换为 mb

public long byteToMB(long byteTransform)
    {
        long mb=1024L*1024L;
        return byteTransform/mb;

    }

我用来更新进度对话框的代码片段

byte data[] = new byte[1024];
            while ((count = input.read(data)) != -1) {  
                asynch.publishProgress(count);
                output.write(data, 0, count);


            }

我像这样设置我的进度对话框的最大值

sizePDialog+=ConnectionManager.getLength(url);
pDialog.setMax((int) byteToMB(sizePDialog));

但是当我这样做时我会出现这个错误

04-07 20:09:55.119: E/AndroidRuntime(20166): java.lang.NumberFormatException: Invalid long: "%1d"

非常感谢你

4

1 回答 1

3

我认为你不应该像文档所说 的那样打电话setProgressNumberFormathttp://developer.android.com/reference/android/app/ProgressDialog.html#setProgressNumberFormat(java.lang.String)onProgressUpdate

更改显示当前和最大进度单位的小文本格式。默认值为“%1d/%2d”。不应该在号码进行中调用。

实际上setProgressNumberFormat,仅更改显示进度和最大进度的方式,您无法更改,就像您尝试过的那样,在格式化之前的值。我建议您在将值传输到进度对话框时将字节转换为 MB,然后将值格式化为 MB。

这样做你应该替换pDialog.incrementProgressBy(progress[0]);bypDialog.incrementProgressBy(byteToMB(progress[0]));并调用

pDialog.setProgressNumberFormat("%1d MB / %2d MB");

onPreExecute

于 2013-04-07T20:59:45.283 回答