进度对话框不会显示异步任务

时间:2010-10-10 11:49:20

标签: android progress-bar android-asynctask

我一直在寻找答案。我有一个异步任务,下载我的应用程序所需的数据库,而这是下载我的应用程序不能做任何事情,因为它引用的所有数据都在这个文件中,我让应用程序等待文件下载,但我试图显示进度对话框,以便用户在等待这种情况发生时知道正在发生的事情。

我的代码目前是

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并将其移动到调用活动而没有运气。

请帮忙!

3 个答案:

答案 0 :(得分:1)

对此的解决方案是查看UI线程被阻止的调用类,因为对话框从未显示过。

答案 1 :(得分:0)

嗯 - 你的doInBackground方法有多长时间了?也许你的对话框显示出来了,但是对话框出现的时间太快了......

答案 2 :(得分: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