How to add ProgressDialog
Asked Answered
F

4

1

I am downloading a file from dropbox which is taking a few seconds. I want to add a ProgressDialog for the download but I don't know how to do that.

public class DownloadFile extends AsyncTask<Void, Long, Boolean> {
    DownloadFile(Context context ,DropboxAPI<?> mApi ,String dropboxpath,String   sdpath,int pos,int s,ArrayList<String> folder) throws DropboxException {
        FileOutputStream mFos;
        File file=new File(sdpath);
        String path = dropboxpath;
        try{
            mFos = new FileOutputStream(file);
            mApi.getFile(path, null, mFos, null);
        }catch (Exception e) {
            // TODO: handle exception
        }
    } 

    @Override
    protected Boolean doInBackground(Void... params) {
        // TODO Auto-generated method stub
        return null;
    }   
}
Forlorn answered 5/7, 2012 at 7:40 Comment(0)
A
3

Do it this way:

public final class DownloadFile extends AsyncTask<Void, Long, Boolean> {

private Context context;
private ProgressDialog progressDialog;

public DownloadFile (Context context) {
    this.context = context;
}

/* 
 * @see android.os.AsyncTask#onPreExecute()
 */
@Override
protected void onPreExecute() {
    try {
        progressDialog = ProgressDialog.show(context, "", "message", true);
    } catch (final Throwable th) {
        //TODO
    }
}

/* 
 * @see android.os.AsyncTask#doInBackground(Params[])
 */
@Override
protected Boolean doInBackground(Void... arg0) {
    //do something
}

    @Override
protected void onProgressUpdate(String... progress) {
    //do something
    super.onProgressUpdate(progress);
}

/* 
 * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
 */
@Override
protected void onPostExecute(Boolean result) {
    progressDialog.dismiss();
} }
Analogy answered 5/7, 2012 at 7:44 Comment(0)
S
0

See there are actually 4 methods of AsyncTask:

  1. onPreExecute() - you can do some pre execution task here.
  2. doInBackground() - you can perform some background work here.
  3. onPostExecute() - you can perform post execution task here. Means like displaying data in ListView, update TextView, etc.
  4. onProgressUpdate() - To update UI while background operation is going on.

So in your case, you can show progress dialog or progress bar inside onPreExecute() method of AsyncTask and dismiss(() the same inside onPostExecute().

Steamheated answered 5/7, 2012 at 7:42 Comment(0)
R
0

Use this simple code @sachin

public class DownloadFile extends AsyncTask<Void, Void, Void> {

    Home home;
    ProgressDialog dialog = null;

    public DownloadFile(Home home) {
        // TODO Auto-generated constructor stub
        this.home = home;
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        //Call hare method for download
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
         dialog.dismiss();  

    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
         dialog = ProgressDialog.show(home, "Downloading......", "", true);
    }

}
Reptant answered 5/7, 2012 at 7:46 Comment(0)
B
0

This article can be useful for you:

http://huuah.com/android-progress-bar-and-thread-updating/

Where inside the run() method of your thread you can invoke a function like this:

 public boolean download(String url, String path, String fileName, Handler progressHandler) {
    try {
        URL sourceUrl = new URL(formatUrl(url));
        if (fileName == null || fileName.length() <= 0) {
            fileName = sourceUrl.getFile();
        }
        if (fileName == null || fileName.length() <= 0) {
            throw new Exception("EMPTY_FILENAME_NOT_ALLOWED");
        }
        File targetPath = new File(path);
        targetPath.mkdirs();
        if (!targetPath.exists()) {
            throw new Exception("MISSING_TARGET_PATH");
        }
        File file = new File(targetPath, fileName);
        URLConnection ucon = sourceUrl.openConnection();
        InputStream is = ucon.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayBuffer baf = new ByteArrayBuffer(100);
        int current = 0;
        int totalSize = ucon.getContentLength();
        while ((current = bis.read()) != -1) {
            baf.append((byte) current);
            // BEGIN - Handler feedback
            if (progressHandler != null && (baf.length() % 100) == 0) {
                Message msg = progressHandler.obtainMessage();
                Bundle b = new Bundle();
                if (totalSize > 0) {
                    b.putInt("total", totalSize);
                    b.putInt("step", baf.length());
                    b.putBoolean("working", true);
                }
                msg.setData(b);
                progressHandler.handleMessage(msg);
            }
            // END
        }
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(baf.toByteArray());
        fos.close();
        // BEGIN - Handler feedback
        if (progressHandler != null) {
            Message msg = progressHandler.obtainMessage();
            Bundle b = new Bundle();
            if (totalSize > 0) {
                b.putInt("total", 0);
                b.putInt("step", 0);
                b.putBoolean("working", false);
            }
            msg.setData(b);
            progressHandler.handleMessage(msg);
        }
        // END
        return file.exists();
    }

Doing this way, you have a more accurate feedback about real progress of you download (byte per byte).

Beadledom answered 5/7, 2012 at 7:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.