0

こんにちは、ダウンロード プロジェクトを書いていますが、ここで立ち往生しています。

@Override
protected void onProgressUpdate(Integer... progress) {

}

//I'm using in my mainactivity like that
Download download = new Download();
download.execute("http://");

更新時に進行状況を取得したいのですが、onProgressUpdate を使用してこれを行うことができますが、メインアクティビティから取得できるかどうか疑問に思っています。つまり、クラスを呼び出した場所です。すべてのプロジェクトで簡単に使用できるため、動的クラスが大好きです。ところで、私の文法を許していただきありがとうございます。

4

2 に答える 2

0

これを使って

       class DownloadFileAsync extends AsyncTask<String, String, String> {

@SuppressWarnings("deprecation")
@Override
protected void onPreExecute() {
    super.onPreExecute();

    showDialog(DIALOG_DOWNLOAD_PROGRESS);
}

@Override
protected String doInBackground(String... aurl) {
    int count;
    File root = android.os.Environment.getExternalStorageDirectory();               
     //
    File dir = new File (root.getAbsolutePath()+"/downoad");  //make ur folder to put download
    if(dir.exists()==false) {
             dir.mkdirs();
         }
    File file = new File(dir, "enter file name");
        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(file);

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

@SuppressWarnings("deprecation")
@Override
protected void onPostExecute(String unused) {
    dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    Toast.makeText(DisplayActivity.this,"Successfully downloaded in phone memory.", Toast.LENGTH_SHORT).show();
}
   }

どのように電話しますか?

    new DownloadFileAsync().execute("your URL");
于 2013-08-05T12:27:03.483 に答える
0

ここに 2 つのオプションがあります。

進行状況を表示するオブジェクトをコンストラクターを使用して AsyncTask に渡し、それを保存します。

private ProgressObject mObject;
public void MyAsyncTask(ProgressObject object) {
   mObject = object
}

そして onProgress() メソッドの更新:

object.setProgress();   //assuming the ProgressObject has a method setProgress() obviously

または、ある種のリスナーを設定することもできます:

public interface ProgressListener() {
     public void onProgress(int progress);
}
private mProgressListener;
public void MyAsyncTask(ProgressListener listener) {
    mProgressListener = listener;
}

次に、onProgress() メソッドで使用します。

mProgressListener.onProgress(80);

ほんの一例で、あまり多くはありませんが、お役に立てば幸いです。

于 2013-08-05T12:21:27.073 に答える