我有以下代码:
public class SomeActivity extends Activity {
Context context;
List<MenuItem> menuItems;
public void importList(View v) {
menuItems = new ArrayList<MenuItem>();
ProgressDialog dialog = ProgressDialog.show(this.context, "TITLE", "MSG");
MyAsyncTask task = new MyAsyncTask(context); // Context is here because I tried to create ProgressDialog inside pre/postExecute, but it doesn't work either
task.execute();
try {
// menuItems = task.get();
} catch(Exception e) {
// : (
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
this.context = this;
}
}
当我评论该行时,我从AsyncTask获取值(“menuItems = task.get()”),每个方法都可以正常工作。但是当我取消注释它时,ProgressDialog会在任务完成后显示,并返回值。那是为什么?
我认为它与这些上下文有关(这就是我加入onCreate方法的原因),但我不知道如何修复它。显然,我希望ProgressDialog显示BEFORE任务完成,而不是之后。
不确定是否相关 - MyAsyncTask正在执行http请求和一些json解析。
答案 0 :(得分:2)
我认为它与这些背景有关
完全没有。此外,从Context
发送Activity
时,您不需要创建变量。只需使用this
或ActivityName.this
。
MyAsyncTask task = new MyAsyncTask(this);
但是当我取消注释它时,ProgressDialog会在任务完成后显示,并返回值。那是为什么?
调用get()
阻止UI
,这就是为什么在完成之前你看不到进展的原因。你不需要打电话。 onProgressUpdate()
的要点是后台主题(doInBackground()
)可以调用它来更新UI
,因为doInBackground()
未在UI
上运行。
从代码中删除该行,不要再查看它。如果您认为自己需要它,请解释,我们可以帮助您找到更好的方法。
修改强>
关于任务完成时更新的