1

ドロップボックスからファイルをダウンロードしていますが、数秒かかります。ダウンロード用にを追加したいのですが、ProgressDialogその方法がわかりません。

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;
    }   
}
4

4 に答える 4

3

このようにしてください:

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();
} }
于 2012-07-05T07:44:19.687 に答える
0

AsyncTaskには実際には4つのメソッドがあることを確認してください。

  1. onPreExecute()-ここで実行前のタスクを実行できます。
  2. doInBackground()-ここでいくつかのバックグラウンド作業を実行できます。
  3. onPostExecute()-ここで実行後のタスクを実行できます。ListViewでのデータの表示、TextViewの更新などの手段。
  4. onProgressUpdate()-バックグラウンド操作の実行中にUIを更新します。

したがって、あなたの場合、onPreExecute()AsyncTaskのメソッド内に進行状況ダイアログまたは進行状況バーを表示し、同じ内部でdismiss(()を実行できonPostExecute()ます。

于 2012-07-05T07:42:48.797 に答える
0

この単純なコード@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);
    }

}
于 2012-07-05T07:46:43.977 に答える
0

この記事はあなたに役立つことがあります:

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

スレッドのrun()メソッド内で、次のような関数を呼び出すことができます。

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

このようにすると、ダウンロードの実際の進行状況(バイト/バイト)に関するより正確なフィードバックが得られます。

于 2012-07-05T07:47:50.873 に答える