Android,异步和进度对话框

时间:2013-09-04 20:35:05

标签: java android android-asynctask

我有以下代码:

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解析。

1 个答案:

答案 0 :(得分:2)

  

我认为它与这些背景有关

完全没有。此外,从Context发送Activity时,您不需要创建变量。只需使用thisActivityName.this

 MyAsyncTask task = new MyAsyncTask(this);
  

但是当我取消注释它时,ProgressDialog会在任务完成后显示,并返回值。那是为什么?

调用get()阻止UI,这就是为什么在完成之前你看不到进展的原因。你不需要打电话。 onProgressUpdate()的要点是后台主题(doInBackground())可以调用它来更新UI,因为doInBackground()未在UI上运行。

从代码中删除该行,不要再查看它。如果您认为自己需要它,请解释,我们可以帮助您找到更好的方法。

修改

关于任务完成时更新的

See this SO answer