Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写入(缓冲区,0,缓冲区大小); bytesAvailable=fileInputStream.available(); publishProgress((int)((progress*100)/(file.length()); bufferSize=Math.min(字节可用,maxBufferSize); bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小); 进度+=字节读取; }//while语句结束 fileInputStream.close(); 出版进度(100); outputStream.flush(); outputStream.close(); }//试体末端 捕获(例外情况除外) { //例如printStackTrace(); Log.e(“错误:,例如getMessage()); } 返回null; }//底底法 //更新进展情况 @凌驾 public void onProgressUpdate(整型…值) { super.onProgressUpdate(值); dialog.setProgress(值[0]); }//onProgressUpdate结束 //完成进度后,对话框将消失! @凌驾 PostExecute上的公共作废(作废结果) { 尝试 { dialog.dismise(); }//第二个try正文的结尾 捕获(例外e) { } }//onPostExecute方法的结束 }//异步任务类的结束 }//干管末端_Java_Android_Progressdialog - Fatal编程技术网

Java 写入(缓冲区,0,缓冲区大小); bytesAvailable=fileInputStream.available(); publishProgress((int)((progress*100)/(file.length()); bufferSize=Math.min(字节可用,maxBufferSize); bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小); 进度+=字节读取; }//while语句结束 fileInputStream.close(); 出版进度(100); outputStream.flush(); outputStream.close(); }//试体末端 捕获(例外情况除外) { //例如printStackTrace(); Log.e(“错误:,例如getMessage()); } 返回null; }//底底法 //更新进展情况 @凌驾 public void onProgressUpdate(整型…值) { super.onProgressUpdate(值); dialog.setProgress(值[0]); }//onProgressUpdate结束 //完成进度后,对话框将消失! @凌驾 PostExecute上的公共作废(作废结果) { 尝试 { dialog.dismise(); }//第二个try正文的结尾 捕获(例外e) { } }//onPostExecute方法的结束 }//异步任务类的结束 }//干管末端

Java 写入(缓冲区,0,缓冲区大小); bytesAvailable=fileInputStream.available(); publishProgress((int)((progress*100)/(file.length()); bufferSize=Math.min(字节可用,maxBufferSize); bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小); 进度+=字节读取; }//while语句结束 fileInputStream.close(); 出版进度(100); outputStream.flush(); outputStream.close(); }//试体末端 捕获(例外情况除外) { //例如printStackTrace(); Log.e(“错误:,例如getMessage()); } 返回null; }//底底法 //更新进展情况 @凌驾 public void onProgressUpdate(整型…值) { super.onProgressUpdate(值); dialog.setProgress(值[0]); }//onProgressUpdate结束 //完成进度后,对话框将消失! @凌驾 PostExecute上的公共作废(作废结果) { 尝试 { dialog.dismise(); }//第二个try正文的结尾 捕获(例外e) { } }//onPostExecute方法的结束 }//异步任务类的结束 }//干管末端,java,android,progressdialog,Java,Android,Progressdialog,您的循环应该是这样的,代码中有几个逻辑错误 // Read file bytesRead = fileInputStream.read(buffer, 0, bufferSize); progress=0; progress+=bytesRead; while (bytesRead > 0) { outputStream.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(

您的循环应该是这样的,代码中有几个逻辑错误

// Read file
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
progress=0;
progress+=bytesRead;

while (bytesRead > 0)
{   
    outputStream.write(buffer, 0, bufferSize);
    bytesAvailable = fileInputStream.available(); 
    publishProgress((int)((progress/file.length())*100));
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    progress+=bytesRead;
}//end of while statement

更新:我刚刚注意到,您使用了20MB的缓冲区,将
maxBufferSize
更改为
int-maxBufferSize=1024
,它应该可以工作。

我注意到的问题是:

  • 您的
    bufferSize
    可以是文件的总长度。因此,在一次读取中,缓冲区可能已满。我将其更改为512,以在progressbar中获得明显的更改
  • 在循环内重置
    进度
    变量
  • 此外,您正在将整个缓冲区(即从
    0
    写入
    bufferSize
    )写入输出流。不是真正的“bytesRead”。在最后部分,您可能会得到错误值
  • 在再次阅读之前,您没有重新存储
    缓冲区
更新代码

bufferSize = 512;
buffer = new byte[bufferSize];
// Read file
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
progress=0;

while (bytesRead > 0)
{   

    progress+=bytesRead;
    outputStream.write(buffer, 0, bytesRead);
    bytesAvailable = fileInputStream.available(); 
    publishProgress((int)((progress*100)/(file.length())));
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    buffer = new byte[bufferSize];
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}//end of while statement
fileInputStream.close();
publishProgress(100); 
outputStream.flush();
outputStream.close();

我试过了,但问题还是一样,对话没有进展,我更新了答案。首先,在循环中将
bytesRead
添加到
progress
中两次。第二,在循环的每个迭代中将进度设置为0。第三,你计算百分比的数学是错误的。
bufferSize = 512;
buffer = new byte[bufferSize];
// Read file
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
progress=0;

while (bytesRead > 0)
{   

    progress+=bytesRead;
    outputStream.write(buffer, 0, bytesRead);
    bytesAvailable = fileInputStream.available(); 
    publishProgress((int)((progress*100)/(file.length())));
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    buffer = new byte[bufferSize];
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}//end of while statement
fileInputStream.close();
publishProgress(100); 
outputStream.flush();
outputStream.close();