进度条与Android应用程序中的文件上载不同步
我正试图通过Android应用程序中的POST方法上传一个文件,代码如下,效果良好。如果我尝试在while body中显示刷新的进度条(mNotificationHelper.progressUpdate(sentBytes)),我注意到它与文件上载不同步,但它显示相对于写入数据输出流的百分比。 当while块结束时,上传就真正开始了。看起来,DataOutputStream首先将块保存在本地,然后最后将它们全部上载。。。但此时,进度条已经完成。所以它就像一个假进度条。 有什么想法吗进度条与Android应用程序中的文件上载不同步,android,file,post,upload,Android,File,Post,Upload,我正试图通过Android应用程序中的POST方法上传一个文件,代码如下,效果良好。如果我尝试在while body中显示刷新的进度条(mNotificationHelper.progressUpdate(sentBytes)),我注意到它与文件上载不同步,但它显示相对于写入数据输出流的百分比。 当while块结束时,上传就真正开始了。看起来,DataOutputStream首先将块保存在本地,然后最后将它们全部上载。。。但此时,进度条已经完成。所以它就像一个假进度条。 有什么想法吗 Http
HttpsURLConnection conn = null;
DataOutputStream dos = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
dos = new DataOutputStream(conn.getOutputStream());
long fileSize = sourceFile.length();
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
int sentBytes = 0;
sentBytes += bytesRead;
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
// progressbar refreshed in Notification
mNotificationHelper.progressUpdate(sentBytes);
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
sentBytes += bytesRead;
}
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
serverResponseCode = conn.getResponseCode();
String serverResponseMessage = conn.getResponseMessage();
Log.i("uploadFile", "HTTP Response is : "
+ serverResponseMessage + ": " + serverResponseCode);
当您遇到UI问题时,总是使用Log来调试实际值,在您的情况下,您会填充一个缓冲区,因此我想它“太快”了,无法在进度条上显示 我相信你一定会成功的
connection.setChunkedStreamingMode(maxBufferSize);
要“一包一包”地发送数据,而不是填充缓冲区,然后发送整个缓冲区。当用户界面出现问题时,请始终使用日志调试实际值,在您的情况下,填充缓冲区,因此我想它“太快”了,无法在进度条上显示 我相信你一定会成功的
connection.setChunkedStreamingMode(maxBufferSize);
要“一包一包”地发送数据,而不是填充缓冲区,然后发送整个缓冲区。当用户界面出现问题时,请始终使用日志调试实际值,在您的情况下,填充缓冲区,因此我想它“太快”了,无法在进度条上显示 我相信你一定会成功的
connection.setChunkedStreamingMode(maxBufferSize);
要“一包一包”地发送数据,而不是填充缓冲区,然后发送整个缓冲区。当用户界面出现问题时,请始终使用日志调试实际值,在您的情况下,填充缓冲区,因此我想它“太快”了,无法在进度条上显示 我相信你一定会成功的
connection.setChunkedStreamingMode(maxBufferSize);
要“一包一包”地发送数据,而不是填充缓冲区,然后发送整个缓冲区。我猜您是在Asyntask中执行此操作的。我正在Android服务启动的线程中运行它,考虑使用AsyncTask?问题是progressbar刷新工作正常,但显示写入缓冲区的值(在while正文中)。当缓冲区通过网络写入时,进度条已经完成。在上面的代码行中,您在哪里关闭进度条?我猜您是在AsynTaskI中执行此操作的,我正在Android服务启动的线程中运行它考虑使用AsyncTask?问题是进度条刷新工作正常,但是显示写入缓冲区的值(在while主体中)。当缓冲区通过网络写入时,进度条已经完成。在上面的代码行中,您在哪里关闭进度条?我猜您是在AsynTaskI中执行此操作的,我正在Android服务启动的线程中运行它考虑使用AsyncTask?问题是进度条刷新工作正常,但是显示写入缓冲区的值(在while主体中)。当缓冲区通过网络写入时,进度条已经完成。在上面的代码行中,您在哪里关闭进度条?我猜您是在AsynTaskI中执行此操作的,我正在Android服务启动的线程中运行它考虑使用AsyncTask?问题是进度条刷新工作正常,但是显示写入缓冲区的值(在while主体中)。当通过网络写入缓冲区时,进度条已经完成。关闭进度条的行代码在上面的哪里?