我有一个进度对话框,显示使用byte作为进度单位下载我的文件 我想将进度单位转换为兆字节
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"
非常感谢
答案 0 :(得分:2)
我认为您不应该像文档中所说的那样在setProgressNumberFormat
中致电onProgressUpdate
http://developer.android.com/reference/android/app/ProgressDialog.html#setProgressNumberFormat(java.lang.String)
更改显示当前和最大单位的小文本的格式 进步。默认值为“%1d /%2d”。不应该在期间打电话 号码正在进行中。
实际上setProgressNumberFormat
只会改变显示进度和最大进度的方式,就像你试过的那样,它不能像格式化之前那样改变它。
我建议你在将值传输到进度对话框时将转换字节转换为MB,然后将值格式化为MB。
这样做是为了将pDialog.incrementProgressBy(progress[0]);
替换为pDialog.incrementProgressBy(byteToMB(progress[0]));
并致电
pDialog.setProgressNumberFormat("%1d MB / %2d MB");
onPreExecute
中的