3

一次上传多个图像时,我想显示进度条,该进度条在状态栏通知区域中显示进度条,信息为 1/5 和 2/5 等。其中 1 是没有上传的图像,5 是要上传的图像总数。

在这里我可以在通知区域显示进度条。任何人都可以建议我,如何计算上传(完成)的图像数量以显示进度条(如 1/5)更新。提前致谢。

为了更清楚

我有一个将单个图像上传到服务器的异步任务。但我做不到

1> 计算总图像的大小(例如 5 个图像)

2>如何查找总共上传5张图片的图片数量

private class FileUploadTask extends AsyncTask<Object, Integer,String> {

    private ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(context);
        dialog.setMessage("Uploading...");
        dialog.setIndeterminate(false);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setProgress(0);
        dialog.show();
    }

    @Override
    protected String doInBackground(Object... arg0) {
        try {
            File file = new File("/mnt/sdcard/DCIM/100MEDIA/IMAG0149.jpg");
            FileInputStream fileInputStream = new FileInputStream(file);
            byte[] bytes = new byte[(int) file.length()];
            fileInputStream.read(bytes);
            fileInputStream.close();

            URL url = new URL("http://android.com.bd/form.php");
            HttpURLConnection connection = 
                    (HttpURLConnection) url.openConnection();
            OutputStream outputStream = connection.getOutputStream();

            int bufferLength = 1024;
            for (int i = 0; i < bytes.length; i += bufferLength) {
                int progress = (int)((i / (float) bytes.length) * 100);
                Log.i("progress",progress+"dfdf");
                publishProgress(progress);
                if (bytes.length - i >= bufferLength) {
                    outputStream.write(bytes, i, bufferLength);
                } else {
                    outputStream.write(bytes, i, bytes.length - i);
                }
            }
            publishProgress(100);

            outputStream.close();
            outputStream.flush();

            InputStream inputStream = connection.getInputStream();
            // read the response
            inputStream.close();
            return "ok";

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        dialog.setProgress(progress[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        Log.v("sds", result);
        try {
            dialog.dismiss();
        } catch(Exception e) {
        }

    }

}
4

3 回答 3

4

看看这个 TL;DR 博客文章/教程。你应该能够做类似的事情。您将需要使用ProgressDialog,使用 更新其状态ASyncTask。如果您已经在使用ASyncTask图片上传,那么您已经准备好这些部件了。

http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/

另请查看这个 SO 问题 -使用 Android 下载文件,并在 ProgressDialog 中显示进度。你的问题之前已经回答过了。您只需要调整解决方案以通过自定义 1/5、2/5 等显示进度条onProgressUpdate。我还没有测试过这段代码,但我想像这些方面的东西会让你像你想要的那样逐步显示进度。

    @Override
    protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        if (progress[0] < 20) {            
            mProgressDialog.setProgress(0);
        } else if (progress[0] < 40) {            
            mProgressDialog.setProgress(20);
        }
        else if (progress[0] < 60) {            
            mProgressDialog.setProgress(40);
        }
        else if (progress[0] < 80) {            
            mProgressDialog.setProgress(60);
        }
        else if (progress[0] < 100) {            
            mProgressDialog.setProgress(80);
        }
        else if (progress[0] == 100) {            
            mProgressDialog.setProgress(100);
        }
    }
于 2012-09-11T08:56:49.763 回答
0

你的图像在哪里?你必须这样做

File fav = new File(Environment.getExternalStorageDirectory().getPath());
File[] filesav = fav.listFiles();
for (int i = 0; i < filesav.length; i++) {
        inside you send your pictures and count 

}

变量 i 是您的图像编号,而 filesav.length 是您的总图像编号

于 2014-01-06T17:44:19.933 回答
-1

好吧,这真的取决于您如何下载图像?

我的建议是创建某个DownloadManager类的实例(单例),它将计算和管理开始和完成下载的数量。此实例将用于创建新的下载,并在每次下载完成时收到通知。收到通知后,它可以更新进度条。

但这是一个非常笼统的答案。如果没有有关您当前如何进行下载的更多信息,就无法做得更好(它们是在单独的线程中完成的吗?它们是顺序的还是并行的?...)

于 2012-09-11T08:50:43.417 回答