2010-10-10 83 views
2

我一直在尋找一個這樣的答案一段時間了。我有一個異步任務,下載我的應用程序所需的數據庫,而這是下載我的應用程序無法做任何事情,因爲它引用的所有數據都在這個文件中,我有應用程序等待文件被下載,但我試圖顯示進度對話框,以便用戶知道發生了什麼事情,同時等待這種情況發生。進度對話框不會顯示異步任務

我的代碼是目前

public class fileDownloader extends AsyncTask<Void, Integer, SQLiteDatabase> 
{ 
    private File dbFile; 
    private ProgressDialog progressDialog; 
    private Context context; 
    private SQLiteDatabase database; 
    private SQLiteDatabase.CursorFactory factory; 

    public fileDownloader(Context c) 
    { 
     super(); 
     context = c; 
    } 
    @Override  
    protected void onPreExecute() 
    {  
     super.onPreExecute(); 
     progressDialog = new ProgressDialog(this.context); 
     progressDialog.setMessage("Downloading Database..."); 
     progressDialog.setCancelable(false); 
     progressDialog.setIndeterminate(true); 
     progressDialog.show(); 
    } 

    @Override 
    protected SQLiteDatabase doInBackground(Void... v) 
    {   
    .... 
    } 

    @Override 
    protected void onPostExecute(SQLiteDatabase db1) 
    { 
     progressDialog.dismiss(); 
    } 

但是什麼也不顯示我也曾嘗試直接調用ProgressDialog.show在預執行和移動這沒有運氣調用活動。

請幫忙!

+0

我已經有另一個解決方案沒有成功,我甚至嘗試添加敬酒,看看是否可以得到這個顯示和hav沒有這個運氣! – Philderbeast 2010-10-31 04:19:03

回答

1

解決方案是看看調用類的UI線程被阻止,因此對話框從來沒有出現。

+1

我有同樣的問題,但我不明白你的解決方案。你是如何改變事情的,以便UI線程不再被阻塞? – 2012-02-03 17:58:03

+1

我同意@ScottBiggs。你能解釋一下自己嗎? – adneal 2012-04-20 02:28:01

0

嗯 - 您的doInBackground方法運行多長時間?也許你的對話框顯示,但時間太快,對話框顯示出來...

+0

它需要大約1 - 2分鐘時間,這樣足夠長的時間才能彈出對話框並被看到。 – Philderbeast 2010-10-10 19:51:28

0

下面的代碼工作正常,我使用它:

private class DownloadHomeSectionData extends 
     AsyncTask<Void, Void, Boolean> { 
    ProgressDialog progressDialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = new ProgressDialog(mainScreen); 
     progressDialog.setMessage(getResources() 
       .getString(R.string.loading)); 
     progressDialog.setCancelable(false); 
     progressDialog.setIndeterminate(true); 
     progressDialog.show(); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     for (HomeButton homeBtn : appDesigner.getHomeButtons()) { 
      StorageManager.getInstance().downloadFileSyncronously(
        homeBtn.getTab_logo_selected_image()); 
      StorageManager.getInstance().downloadFileSyncronously(
        homeBtn.getTab_logo_unselected_image()); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     super.onPostExecute(result); 
     progressDialog.dismiss(); 
    } 
} 

在你的情況,我想你可能會傳遞錯誤的上下文ProgressDialog