3

在我的應用程序中,我正在下載一個視頻文件。我想顯示下載的進度條。如何給下載的進度條?

通過AsyncTask Concept怎麼可能?

感謝,

尼基

回答

6

使用的AsyncTask的onProgressUpdate方法。

如果你知道文件的大小可以設置在onPreExecute最大值:

protected void onPreExecute() { 
    ProgressDialog myDialog = new ProgressDialog(context); 
    myDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    myDialog.setMax(maxValue); 
    myDialog.show(); 
} 

編輯:添加myDialog.show();

有幾種方法來更新進度,或者通過通過量增加或由進度設定爲特定的值:在onDoInBackground()

@Override 
protected void onProgressUpdate(Integer... progress) { 
    myDialog.incrementProgressBy(progress[0]); 

    // or 
    // myDialog.setProgress(progress[0]); 

} 

然後:

@Override 
protected void doInBackGround() { 
    // your code 
    publishProgress(1); 
} 

在佈局中使用進度條編輯示例:

在您的佈局文件中,添加一個像這樣的進度條

<ProgressBar 
    android:id="@+id/progressbar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:visibility="gone" 
    /> 

而在你的AsyncTask:

protected void onPreExecute() { 
    ProgressBar myProgress = findViewById(R.id.progressbar); 
    myProgress.setMax(maxValue); 
    myProgress.setVisibility(View.VISIBLE); 
} 

protected void onProgressUpdate(Integer... progress) { 
    myProgress.setProgress(progress[0]); 
} 
+0

@cantOna時間長度的代碼:非常感謝。 ..但是我無法在我的活動中看到進度條。 – Niki

+0

@cantOna:我沒有得到任何使用上述代碼的輸出 – Niki

+0

對不起,忘了將myDialog.show()添加到onPreExecute。那是錯誤嗎? –

0

首先,你必須計算下載TIMI,然後實施進度條按時間限制。在這裏,我封閉的進度條

new Thread(new Runnable() { 
     public void run() { 
      while (mProgressStatus < 100) { 
       mProgressStatus = doWork(); 

       // Update the progress bar 
       mHandler.post(new Runnable() { 
        public void run() { 
         mProgress.setProgress(mProgressStatus); 
        } 
       }); 

的示例程序這是用於計算下載文件

//once the connection has been opened    

List values = urlConnection.getHeaderFields().get("content-Length")
if (values != null && !values.isEmpty()) {

// getHeaderFields() returns a Map with key=(String) header 
// name, value = List of String values for that header field. 
// just use the first value here. 
String sLength = (String) values.get(0); 

if (sLength != null) { 
    //parse the length into an integer... 
    } 
+0

希望當我們使用AsyncTask時,不會出現Thread的需要。 – Niki