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”,但不显示进度对话框。问题是什么?
答案 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