【发布时间】:2014-07-26 06:44:26
【问题描述】:
我正在尝试通过 Android 应用程序中的 POST 方法使用以下代码上传文件,并且效果很好。如果我尝试在 while 正文 (mNotificationHelper.progressUpdate(sentBytes)) 中显示刷新的进度条,我注意到它与文件上传不同步,但它显示相对于写入的百分比 DataOutputStream 。 当 while 块结束时,上传才真正开始。 DataOutputStream 似乎首先将块保存在本地,然后最后将它们全部上传......但此时,进度条已经完成。所以它就像一个假的进度条。 有什么想法吗?
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);
【问题讨论】:
-
我猜你是在 AsynTask 里面做的
-
我在 Android 服务启动的线程中运行它
-
考虑过使用 AsyncTask 吗?
-
问题是进度条刷新工作,但显示写入缓冲区的值(在while正文中)。当缓冲区通过网络写入时,进度条已经完成。
-
关闭进度条的代码在哪里?