【问题标题】:Progress dialog wont show with async task异步任务不会显示进度对话框
【发布时间】:2010-10-10 11:49:19
【问题描述】:

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

我的代码目前是

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

请帮忙!

【问题讨论】:

  • 我又一次尝试解决这个问题,但没有成功,我什至尝试添加一个 toast 看看是否可以让它显示出来,但也没有运气!

标签: android progress-bar android-asynctask


【解决方案1】:

解决方案是查看 UI 线程被阻塞的调用类,因为对话框从未出现过。

【讨论】:

  • 我有同样的问题,但我不明白你的解决方案。您是如何进行更改以使 UI 线程不再被阻塞的?
  • 我同意@ScottBiggs。请您再解释一下好吗?
【解决方案2】:

嗯 - 您的 doInBackground 方法运行了多长时间?也许您的对话框已显示,但对话框显示的时间太快了...

【讨论】:

  • 大气压大约需要 1 到 2 分钟,所以足够长的时间让对话框弹出并被看到。
【解决方案3】:

以下代码运行良好,我正在使用它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多