【问题标题】:How to download all images one by one and show progress status如何一张一张下载所有图片并显示进度状态
【发布时间】:2015-11-04 07:35:54
【问题描述】:

我想将服务器上的所有图像都下载到 Url 的数组字符串中,这样我就不必从服务器下载图像的 zip 文件并在下载后解压缩。

所以我想一张一张下载图片,并在进度条中显示下载状态。但我在这方面非常失败。我想到了一个想法来制作 Url 的字符串数组并使用 For 循环下载,但它正在下载字符串数组的最后一个图像并拒绝或传递数组中的所有其他图像。我想我知道发生了什么,但我知道当时的解决方案是什么。

到目前为止我做了什么

protected Void doInBackground(Void... arg0) {
        try {
            //set the download URL, a url that points to a file on the internet
            //this is the file to be downloaded
            String [] imageUrl = {"http://www.androidbegin.com/tutorial/flag/india.png","http://www.androidbegin.com/tutorial/flag/pakistan.png"
                    ,"http://www.androidbegin.com/tutorial/flag/china.png","http://www.androidbegin.com/tutorial/flag/unitedstates.png"};
            URL url;
            HttpURLConnection urlConnection = null;
            for(int i=0;i<imageUrl.length;i++){
                 url = new URL(imageUrl[i]);

                //create the new connection
                urlConnection = (HttpURLConnection) url.openConnection();

                //set up some things on the connection
                urlConnection.setRequestMethod("GET");
                urlConnection.setDoOutput(true);

                //and connect!
                urlConnection.connect();

            }
            File storagePath = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Test");
            storagePath.mkdirs();
            String finalName = Long.toString(System.currentTimeMillis());
            File myImage = new File(storagePath, finalName + ".png");


            //this will be used to write the downloaded data into the file we created
            FileOutputStream fileOutput = new FileOutputStream(myImage);

            //this will be used in reading the data from the internet
            InputStream inputStream = urlConnection.getInputStream();

            //this is the total size of the file
            int totalSize = urlConnection.getContentLength();
            //variable to store total downloaded bytes
            int downloadedSize = 0;

            //create a buffer...
            byte[] buffer = new byte[1024];
            int bufferLength = 0; //used to store a temporary size of the buffer

            //now, read through the input buffer and write the contents to the file
            while ((bufferLength = inputStream.read(buffer)) > 0) {
                //add the data in the buffer to the file in the file output stream (the file on the sd card
                fileOutput.write(buffer, 0, bufferLength);
                //add up the size so we know how much is downloaded
                downloadedSize += bufferLength;
                //this is where you would do something to report the prgress, like this maybe
               // updateProgress(downloadedSize, totalSize);

            }
            //close the output stream when done
            fileOutput.close();

            //catch some possible errors...
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // see http://androidsnippets.com/download-an-http-file-to-sdcard-with-progress-notification
        return null;
    }

** 我想要什么:**

  1. 一张一张下载所有图片。
  2. 下载一张图片后,它应该会保存在设备中并更新进度状态。

请给我看一些源代码,而不是给我一些想法。并且很少有源代码和完整的解决方法将不胜感激。

【问题讨论】:

    标签: android android-asynctask client-server android-async-http


    【解决方案1】:

    saving image codefor 循环内。因为这段代码在for 循环之外,所以只有你的最后一张图片会被保存,因为在 for 循环结束时使用了最后一个 url。

    【讨论】:

    • 我们在您的代码中看不到进度条。那怎么更新呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2022-10-21
    • 2013-06-11
    相关资源
    最近更新 更多