【问题标题】:Android: How to calculate progress percentage for multiple files uploadAndroid:如何计算多个文件上传的进度百分比
【发布时间】: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


【解决方案1】:

mProgressBar.setMax(mFilesCount);。如果你这样做了,那么你应该在 publishProgress 中使用 mFilesDownloaded。否则从 mTotalBytesOfAllFiles 开始并使用 mTotalBytesUploaded 进行更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2010-11-22
    • 2019-12-04
    • 2018-12-11
    • 2014-03-05
    相关资源
    最近更新 更多