【发布时间】:2014-09-12 07:12:41
【问题描述】:
我正在将文件从 android 上传到服务器,我正在以从 0 到 100% 的所有文件的总体进度百分比进行上传。所有文件都在一个一个上传。已知的事情是
- 文件总数
- 单个文件的总字节数
- 单个文件的传输字节数
- 上传文件总数
我有一个进度条来显示所有人的总体百分比。
上传代码为:
public abstract class UploadTask extends AsyncTask<String, Integer, String>
{
private Context mContext;
private Cursor mCursor;
private ProgressBar mProgressBar;
private int mItemCounter;
private int mFilesCount;
private int mUploaded;
private long mTotalSize;
public UploadTask(Context context, Cursor cursor, ProgressBar progressBar)
{
mContext = context;
mCursor = cursor;
mProgressBar = progressBar;
mFilesCount = cursor.getCount();
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
mProgressBar.setMax(mFilesCount);
}
@Override
protected String doInBackground(String... params)
{
HttpClient httpClient = new DefaultHttpClient();
HttpContext httpContext = new BasicHttpContext();
while (mCursor.moveToNext())
{
String path = mCursor.getString(mCursor.getColumnIndex("_data"));
HttpPost httpPost = new HttpPost("http://...");
try
{
CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(new CustomMultiPartEntity.ProgressListener()
{
@Override
public void transferred(long num)
{
publishProgress((int) (((((float) mUploaded) + ((float) num / (float) mTotalSize)) / (float) mFilesCount)));
}
});
multipartContent.addPart("userfile", new FileBody(new File(path), Utility.removeExtention(title), type, "UTF-8"));
mTotalSize = multipartContent.getContentLength();
httpPost.setEntity(multipartContent);
HttpResponse response = httpClient.execute(httpPost, httpContext);
InputStream inputStream = response.getEntity().getContent();
StringBuilder total = new StringBuilder();
String line;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
try
{
while ((line = bufferedReader.readLine()) != null)
{
total.append(line);
}
inputStream.close();
bufferedReader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
Log.wtf("response", total.toString() + " File Size: " + (mTotalSize / (1024)) + "KB");
}
catch (Exception e)
{
e.printStackTrace();
}
mUploaded++;
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progress)
{
super.onProgressUpdate(progress);
mProgressBar.setProgress(progress[0]);
}
@Override
protected void onPostExecute(String s)
{
onCompleted(s == null);
}
protected abstract void onCompleted(boolean result);
}
【问题讨论】:
-
好的。所以有什么问题?包括一个显示问题的最小测试用例并解释什么是“错误”或“不起作用”。
-
@user2864740 它在所有情况下都不能正常工作。我检查了 5、50、250 多张图片。
标签: android upload progress-bar percentage