AsyncTask 中的 ProgressDialog 抛出异常

发布于 2024-09-06 22:02:33 字数 812 浏览 7 评论 0原文

我试图在我的 AsyncTask 获取数据时显示一个简单的 ProgressDialog 。在我的 onPreExecute() 方法中,我有以下内容:

pd = ProgressDialog.show(c, "Loading...", "Please wait");

c 是从 this.getApplicationContext( 传递到我的 AsyncTask 构造函数中的上下文)。不幸的是,我不断收到此消息的异常:

无法添加窗口 - 令牌 null 不适用于应用程序

我做错了什么?

更新:使用this而不是this.getApplicationContext()揭示了另一个问题。当我调用 ProgressDialog.show(...) 时,会显示 ProgressDialog,但要等到 AsyncTask 完成后才会显示。换句话说,先加载数据,然后再加载对话框如果我在 onPostExecute() 中包含 pd.dismiss() ,那么我什至都看不到该对话框(可能是因为它在打开之前就已关闭)。

最终解决方案: 事实证明,fetch.get() 占用了 UI 线程并且不让 ProgressDialog 显示。

I'm trying to make a simple ProgressDialog appear while my AsyncTask is fetching data. In my onPreExecute() method I have this:

pd = ProgressDialog.show(c, "Loading...", "Please wait");

c is the context passed into the constructor of my AsyncTask from this.getApplicationContext(). Unfortunately, I keep getting an exception with this message:

Unable to add window -- Token null is not for an application

What am I doing wrong?

Update: Using this instead of this.getApplicationContext() has revealed another problem. When I call ProgressDialog.show(..., a ProgressDialog is displayed, but not until after the AsyncTask has completed. In other words, the data loads and then the dialog is displayed. If I include pd.dismiss() in my onPostExecute() then I never even see the dialog (presumable because it is closed before it ever gets opened).

Final solution: It turns out that fetch.get() was hogging the UI thread and not letting the ProgressDialog display.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柏林苍穹下 2024-09-13 22:02:33
ProgressDialog dialog;
@Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(viewContacts.this);
        dialog.setMessage(getString(R.string.please_wait_while_loading));
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        dialog.show();
    }
ProgressDialog dialog;
@Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(viewContacts.this);
        dialog.setMessage(getString(R.string.please_wait_while_loading));
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        dialog.show();
    }
野の 2024-09-13 22:02:33

试试这个

  this.pd = ProgressDialog.show(this,"Loading...", "Please wait", true, false);

,是的,我认为你的上下文也有同样的问题。

try this

  this.pd = ProgressDialog.show(this,"Loading...", "Please wait", true, false);

and yes I think the same the problem is with your context.

香橙ぽ 2024-09-13 22:02:33

使用 YourClassName.this 而不是使用 getApplicationContext()this.getApplicationContext()

Use YourClassName.this instead of using getApplicationContext() or this.getApplicationContext()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文