我正在使用ProgressBar尝试显示下载和保存文件的进度。 ProgressBar显示,但保持为0,直到任务完成时关闭。我尝试了不同的方法,但它不会更新。代码有问题吗?
class downloadData extends AsyncTask<Void, Integer, Void>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params)
{
int count;
try
{
URL url = new URL("http://google.com");
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
InputStream is = url.openStream();
File testDirectory = new File(MainActivity.this.getFilesDir(), "downloadedData.txt");
if (!testDirectory.exists())
{
testDirectory.mkdir();
}
FileOutputStream fos = new FileOutputStream(testDirectory+"/downloadedData.txt");
byte data[] = new byte[1024];
long total = 0;
while ((count = is.read(data)) != -1)
{
total += count;
int neki = (int)(((double)total/lenghtOfFile)*100);
this.publishProgress(neki);
fos.write(data, 0, count);
}
is.close();
fos.close();
}
catch (Exception e)
{
Log.e("ERROR DOWNLOADING","Unable to download" + e.getMessage());
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.publishProgress(values);
progressDialog.setProgress(values[0]);
}
@Override
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
progressDialog.dismiss();
}
}
的onCreate
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setCancelable(true);
progressDialog.setMax(100);
progressDialog.setMessage("Downloading Data");
单击按钮开始下载时:progressDialog.show();
答案 0 :(得分:0)
尝试调试计算进度的位置。这可能是一个演员问题,您可以尝试分两步来避免在分裂后获得0。但是你应该再次创建一个具有此进度值的变量,在那里放置一个断点并查看转换问题!
答案 1 :(得分:0)
我不确定您的代码中可能存在什么问题,但您已经知道 progressDialog.incrementProgressBy(incrementValue);
答案 2 :(得分:0)
这可能听起来有些迟钝,但您在设置进度后尝试invalidate()
ProgressBar吗?我不确定它会在您设置进度时自动执行。
答案 3 :(得分:0)
我也遇到了同样的问题,花了好几个小时。问题在于计算进度值。
int neki = (int)(((double)total/lenghtOfFile)*100);
相反,您应该分两步进行计算:
int neki = total * 100;
neki = (int)(neki/lengthOfFile);
publishProgress(neki);
这解决了我的问题。希望这会有所帮助。