ProgressDialog未显示在AsyncTask中

时间:2011-12-24 09:08:35

标签: android android-asynctask progressdialog

Document doc = new Obtainer(context, uri).execute().get();

活动类中的此代码呈现Obtainer(扩展AsyncTask),它从url获取xml文档。这是onPreExecute方法:

protected void onPreExecute() {
        super.onPreExecute();
        System.out.println("Pre execute began");
        exception = null;
        dialog = new ProgressDialog(context);
        dialog.setMessage("Loading started");
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        System.out.println("Preexecute end");
        dialog.show();
    }

上下文在构造函数中设置:

public Obtainer(Context c, String addr) {
    context = c;
    address = addr;
}

在运行时期间,我可以在控制台输出中看到“Pre execute started”和“Preexecute end”,但不显示进度对话框。问题是什么?

2 个答案:

答案 0 :(得分:0)

使用此代码,它适用于我:

class Obtainer extends AsyncTask<Void, Void, Void> {
    private ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(App.this); // App - your main activity class
        dialog.setMessage("Please, wait...");
        dialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
                // ... 
    }

    @Override
    protected void onPostExecute(Void result) {
        dialog.dismiss();
    }

}

并在您的主要活动类方法调用

new Obtainer().execute();

答案 1 :(得分:0)

在创建Obtainer(AsyncTask子类)时,您传递了什么上下文?

如果您通过getApplicationContext()使用Application上下文,则它不能用于创建Dialog(或任何View)。您需要传递一个可以创建视图的上下文。

“如果你习惯在需要Context创建视图的地方使用你的应用程序上下文(例如,调用getApplicationContext()),那么在你找到一个案例之前,这只是时间问题。事情不能像你想要的那样发挥作用。“

来自:https://plus.google.com/107708120842840792570/posts/VTeRBsAeyTi