Progress Bar % completed (download) Display in Android

后端 未结 3 1999
逝去的感伤
逝去的感伤 2020-12-21 15:28

I have a problem with Progress Bar showing % of download completed. I have a service class in which the downloading takes place. I can get the start time and end time of do

相关标签:
3条回答
  • 2020-12-21 16:07

    try like this

    here is a class

    public class XYZ extends Activity {
    
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
    private Button startBtn;
    private ProgressDialog mProgressDialog;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startBtn = (Button)findViewById(R.id.startBtn);
        startBtn.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                startDownload();
            }
        });
    }
    
    private void startDownload() {
        String url = "http://.jpg";
        new DownloadFileAsync().execute(url);
    }
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading file..");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
        }
    }
    

    class DownloadFileAsync extends AsyncTask {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
    
    @Override
    protected String doInBackground(String... aurl) {
        int count;
    
    try {
    
    URL url = new URL(aurl[0]);
    URLConnection conexion = url.openConnection();
    conexion.connect();
    
    int lenghtOfFile = conexion.getContentLength();
    Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
    
    InputStream input = new BufferedInputStream(url.openStream());
    OutputStream output = new FileOutputStream("/sdcard/some_photo_from_gdansk_poland.jpg");
    
    byte data[] = new byte[1024];
    
    long total = 0;
    
        while ((count = input.read(data)) != -1) {
            total += count;
            publishProgress(""+(int)((total*100)/lenghtOfFile));
            output.write(data, 0, count);
        }
    
        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {}
    return null;
    
    }
    protected void onProgressUpdate(String... progress) {
         Log.d("ANDRO_ASYNC",progress[0]);
         mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }
    
    @Override
    protected void onPostExecute(String unused) {
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
    

    } }

    and here is a xml file

    http://pastie.org/4265745

    Best of luck Aamirkhan I.

    0 讨论(0)
  • 2020-12-21 16:16

    I would prefer AsyncTask for this.

    Here's an example

    ProgressDialog mProgressDialog;
    // instantiate it within the onCreate method
    mProgressDialog = new ProgressDialog(YourActivity.this);
    mProgressDialog.setMessage("A message");
    mProgressDialog.setIndeterminate(false);
    mProgressDialog.setMax(100);
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    
    // execute this when the downloader must be fired
    DownloadFile downloadFile = new DownloadFile();
    downloadFile.execute("the url to the file you want to download");
    

    here's the AsyncTask

    private class DownloadFile extends AsyncTask<String, Integer, String> {
    @Override
    protected String doInBackground(String... sUrl) {
        try {
            URL url = new URL(sUrl[0]);
            URLConnection connection = url.openConnection();
            connection.connect();
            // this will be useful so that you can show a typical 0-100% progress bar
            int fileLength = connection.getContentLength();
    
            // download the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream("/sdcard/file_name.extension");
    
            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {
                total += count;
                // publishing the progress....
                publishProgress((int) (total * 100 / fileLength));
                output.write(data, 0, count);
            }
    
            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {
        }
        return null;
    }
    

    This can be done using Download from Service as well as Download Manager class. Refer this question for details.

    EDIT

    The percentage completed is what you actually publish in the progress dialog. If you want to display the percentage, you may use this (total * 100 / fileLength).

    int percentage =  (total * 100 / fileLength);
    TextView tv = (TextView)findViewById(R.id.textview);
    tv.setText("" + percentage);
    

    Use this code to display the percentage in the desired textview.

    0 讨论(0)
  • 2020-12-21 16:17

    Progress bar with counting %

    //you can use these method after Firebase Storage upload task

     final ProgressDialog progressDialog = new ProgressDialog(this);
       progressDialog.setTitle("Uploading...");
       progressDialog.show();
       progressDialog.setCanceledOnTouchOutside(false);
       StorageReference reference = storageReference
                                      .child("images/" + UUID.randomUUID().toString());
    
      reference.putFile(filePath).addOnProgressListener(new 
                                    OnProgressListener<UploadTask.TaskSnapshot>() {
                                    @Override
                                    public void onProgress(@NonNull UploadTask.TaskSnapshot 
                                          taskSnapshot) {
                                        double progress =                  
                 (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
                                        progressDialog.setMessage("Uploaded "+ 
                                     (int)progress+"%");
    
                                    }
                                });
    

    Result

    0 讨论(0)
提交回复
热议问题