Downloading multiple files one by one using AsyncTask?

后端 未结 3 1030
囚心锁ツ
囚心锁ツ 2020-12-01 08:46

I\'m trying to download multiple files one by one (file is downloaded, we start downloading the next file). Using this method I can keep track of the files being downloaded.

3条回答
  •  旧巷少年郎
    2020-12-01 09:17

    package com.example.androidhive;
    
    import java.io.BufferedInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URL;
    import java.net.URLConnection;
    
    import android.app.Activity;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.graphics.drawable.Drawable;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class AndroidDownloadFileByProgressBarActivity extends Activity {
    
        // button to show progress dialog
        Button btnShowProgress;
    
        // Progress Dialog
        private ProgressDialog pDialog;
        ImageView my_image;
        // Progress dialog type (0 - for Horizontal progress bar)
        public static final int progress_bar_type = 0;
    
        // File url to download
        String[] ur = {
                "http://www.funrocker.com/blog/wp-content/uploads/2010/04/Animals-Wild-Life-Jungle-FunRocker.Com-03.jpg",
                "http://2.bp.blogspot.com/-j56yaqpfjVE/TnzTjcqnCjI/AAAAAAAAGPM/MzqmczFkC30/s1600/natural-pictures.jpg",
                "http://www.fantasy-and-art.com/wp-content/gallery/nature-wallpapers/red-tree-wallpaper-hd.jpg" };
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // show progress bar button
            btnShowProgress = (Button) findViewById(R.id.btnProgressBar);
            // Image view to show image after downloading
            my_image = (ImageView) findViewById(R.id.my_image);
            /**
             * Show Progress bar click event
             * */
            btnShowProgress.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // starting new Async Task
                    new DownloadFileFromURL().execute(ur);
                }
            });
        }
    
        /**
         * Showing Dialog
         * */
        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case progress_bar_type:
                pDialog = new ProgressDialog(this);
                pDialog.setMessage("Downloading file. Please wait...");
                pDialog.setIndeterminate(false);
                pDialog.setMax(100);
                pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                pDialog.setCancelable(true);
                pDialog.show();
                return pDialog;
            default:
                return null;
            }
        }
    
        /**
         * Background Async Task to download file
         * */
        class DownloadFileFromURL extends AsyncTask {
    
            /**
             * Before starting background thread Show Progress Bar Dialog
             * */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                showDialog(progress_bar_type);
            }
    
            /**
             * Downloading file in background thread
             * */
            @Override
            protected String doInBackground(String... f_url) {
                int count;
                try {
    
                    for (int i = 0; i < f_url.length; i++) {
                        URL url = new URL(f_url[i]);
                        URLConnection conection = url.openConnection();
                        conection.connect();
                        // getting file length
                        int lenghtOfFile = conection.getContentLength();
    
                        // input stream to read file - with 8k buffer
                        InputStream input = new BufferedInputStream(
                                url.openStream(), 8192);
                        System.out.println("Data::" + f_url[i]);
                        // Output stream to write file
                        OutputStream output = new FileOutputStream(
                                "/sdcard/downloaded" + i + ".jpg");
    
                        byte data[] = new byte[1024];
    
                        long total = 0;
    
                        while ((count = input.read(data)) != -1) {
                            total += count;
                            // publishing the progress....
                            // After this onProgressUpdate will be called
                            publishProgress((int) ((total * 100)/lenghtOfFile));
    
                            // writing data to file
                            output.write(data, 0, count);
                        }
    
                        // flushing output
                        output.flush();
    
                        // closing streams
                        output.close();
                        input.close();
                    }
                } catch (Exception e) {
                    Log.e("Error: ", e.getMessage());
                }
    
                return null;
            }
    
            /**
             * Updating progress bar
             * */
            protected void onProgressUpdate(Integer... progress) {
                // setting progress percentage
                pDialog.setProgress(progress[0]);
            }
    
            /**
             * After completing background task Dismiss the progress dialog
             * **/
            @Override
            protected void onPostExecute(String file_url) {
                // dismiss the dialog after the file was downloaded
                dismissDialog(progress_bar_type);
    
                // Displaying downloaded image into image view
                // Reading image path from sdcard
                String imagePath = Environment.getExternalStorageDirectory()
                        .toString() + "/downloaded.jpg";
                // setting downloaded into image view
                // my_image.setImageDrawable(Drawable.createFromPath(imagePath));
            }
    
        }
    }
    

提交回复
热议问题