gpt4 book ai didi

java - Android、异步和进度对话框

转载 作者:行者123 更新时间:2023-12-02 06:46:02 25 4
gpt4 key购买 nike

我有以下代码:

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 在任务完成之前显示,而不是之后显示。

不确定是否相关 - MyAsyncTask 正在执行 http 请求和一些 json 解析。

最佳答案

I think that it has sth to do with these contexts

一点也不。此外,当从 Activity 发送 Context 时,您不需要创建变量。只需使用 thisActivityName.this

 MyAsyncTask task = new MyAsyncTask(this);

But when I uncomment it, ProgressDialog appears AFTER the task is finished, and value returned. Why is that?

调用 get() 会阻塞 UI,这就是为什么在完成之前您看不到进度的原因。你不需要调用这个。 onProgressUpdate() 的要点是,后台线程 (doInBackground()) 可以调用它来更新 UI,因为 doInBackground( ) 不在 UI 上运行。

从代码中删除该行,并且永远不要再查看它。如果您认为有理由需要它,请解释一下,我们可以帮助您找到更好的方法。

编辑

See this SO answer任务完成后更新

关于java - Android、异步和进度对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com