Android 进度条和多次下载
我想在一个进度条中下载多个文件(目前为2个)(无需重置进度条) 为此,我检索所有文件的总长度,以便在发布进度方法中使用它Android 进度条和多次下载,android,android-asynctask,progress-bar,Android,Android Asynctask,Progress Bar,我想在一个进度条中下载多个文件(目前为2个)(无需重置进度条) 为此,我检索所有文件的总长度,以便在发布进度方法中使用它 byte[] buffer = new byte[1024]; int bufferLength = 0; int total=0; while ((bufferLength = inputStream.read(buffer)) != -1) { total += bufferL
byte[] buffer = new byte[1024];
int bufferLength = 0;
int total=0;
while ((bufferLength = inputStream.read(buffer)) != -1) {
total += bufferLength;
fileOutput.write(buffer, 0, bufferLength);
asynch.publishProgress(bufferLength);
}
问题是我的进度条在达到50%时重置为0,然后再次增加,直到另一个50%
这是我的密码
@Override
protected Void doInBackground(Void... params) {
int totalSizeFile;
totalSizeFile=cm.getLength(url[0]);
totalSizeFile+=cm.getLength(url[1]);
progressBar.setMax(totalSizeFile);
cm.downloadMp3(url[0], "test.mp3", totalTailleFic);
cm.downloadMp3(url[1], "test2.mp3", totalTailleFic);
return null;
}
@Override
protected void onProgressUpdate(Integer... progress) {
textview.setText(String.valueOf(progress[0])+"%");
progressBar.incrementProgressBy(progress[0]);
}
我调用publishprogress方法的下载函数的代码
byte[] buffer = new byte[1024];
int bufferLength = 0;
int total=0;
while ((bufferLength = inputStream.read(buffer)) != -1) {
total += bufferLength;
fileOutput.write(buffer, 0, bufferLength);
asynch.publishProgress(bufferLength);
}
非常感谢您的
ProgressBar
在下载之间重置为零,因为变量total
也重置为零
为了跟踪当前进度,进度条必须使用progressBar.incrementProgressBy()
递增,而不是使用progressBar.setProgress()
设置值
这意味着还必须修改publishProgress()
和onProgressUpdate()
方法,以处理增量
,而不是进度
。并且,增量是您的缓冲区长度
:
asynch.publishProgress(bufferLength);
您还必须使用
ProgressBar.setMax()
将两次下载的总字节数初始化ProgressBar
,因为变量total
也会重置为零,所以您的ProgressBar
在两次下载之间重置为零
为了跟踪当前进度,进度条必须使用progressBar.incrementProgressBy()
递增,而不是使用progressBar.setProgress()
设置值
这意味着还必须修改publishProgress()
和onProgressUpdate()
方法,以处理增量
,而不是进度
。并且,增量是您的缓冲区长度
:
asynch.publishProgress(bufferLength);
您还必须使用
ProgressBar.setMax()
Hello以两次下载的总字节数初始化ProgressBar
。感谢您的帮助,但如果我尝试incrementProgressBy,现在我的进度条会立即填充,而不会出现块,但每次下载之间OnProgressUpdate的进度变量会重置为0。使用setMax()
以总字节数初始化ProgressBar
(请参见编辑)。无论您在OnProgressUpdate()
的Progress
参数上添加了什么,都没有关系。它可以是实际进度、增量,甚至只是指示一个步骤。只需获取该值并将其视为增量,然后将其发送到incrementProgressBy()
。谢谢。我更新了我的代码,但我现在甚至看不到进度条的增加。您好。感谢您的帮助,但如果我尝试incrementProgressBy,现在我的进度条会立即填充,而不会出现块,但每次下载之间OnProgressUpdate的进度变量会重置为0。使用setMax()
以总字节数初始化ProgressBar
(请参见编辑)。无论您在OnProgressUpdate()
的Progress
参数上添加了什么,都没有关系。它可以是实际进度、增量,甚至只是指示一个步骤。只需获取该值并将其视为增量,然后将其发送到incrementProgressBy()
。谢谢。我更新了我的代码,但我现在甚至看不到进度条的增加。