【问题标题】:android upload multiple image with progress bar with progress 1 /5,2/5 and so on?android上传多个带有进度条的图像,进度为1 /5,2/5等等?
【发布时间】:2012-09-04 03:53:14
【问题描述】:

在一次上传多个图像时,我想显示进度条,该进度条在状态栏通知区域中显示进度条,信息为 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) {
        }

    }

}

【问题讨论】:

标签: android image upload android-progressbar


【解决方案1】:

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

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

还可以看看这个 SO 问题 - Download a file with Android, and showing the progress in a ProgressDialog。你的问题之前已经回答过了。您只需要通过自定义onProgressUpdate 来调整解决方案以在 1/5、2/5 等处显示进度条。我还没有测试过这段代码,但我想这些方面的东西可以让你像你想要的那样逐步显示进度。

    @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);
        }
    }

【讨论】:

  • 如,页面是否加载或代码示例是否有效?两者都对我有用。
  • 感谢@Kyle 第二个链接非常有用,但不是解决方案。是的,我可以通过进度更新将单个图像上传到服务器,但我不知道如何一次上传多个图像。
  • +1 获取信息。你能建议我如何上传多张图片吗?
  • 我不确定如何同时上传多个图像,但我建议您按顺序进行。例如,您可以在 onReceiveResult 或 onPostExecute 中启动下一次上传并继续,直到所有图像都上传完毕。你必须重构你的进度对话框来处理这个问题,这样你就不会为每次上传获得一个新的进度对话框。
【解决方案2】:

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

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 是您的总图像编号

【讨论】:

    【解决方案3】:

    嗯,这真的取决于你如何下载图像?

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

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

    【讨论】:

    • 我正在上传图片。你当然有 android 中的下载管理器类来处理它@Orabig
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多