【发布时间】:2014-03-26 17:29:44
【问题描述】:
我一直试图在检索数据时让进度对话框工作。
我使用此链接 Implement android splash screen while loading data 开始,但似乎无法正常工作。
到目前为止,它没有显示任何进度条,因为我认为功能 fillMyTickets 阻塞了 UI 线程,因此没有显示对话框。我不明白如何解决这个问题。通过阅读 Stackoverflow,我找到了解决方案,例如在 AsyncTask 中使用 onProgressUpdate 函数,但这不是我想要的。我所需要的只是一个等待对话框,当 HTTP 调用结束时会显示下载并消失。
exampleFragment.java
中的Asynctask函数private ProgressDialog dialog;
private class PrefetchData extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(getActivity());
dialog.setMessage("Downloading..");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
fillMyTickets();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
dialog.dismiss();
}
exampleFragment.java 中的 fillMyTickets 函数
private void fillMyTickets() {
HttpReader httpReader = new HttpReader();
httpReader
.setOnResultReadyListener(new HttpReader.OnResultReadyListener() {
@Override
public void resultReady(String result) {
JsonHelper jsonHelper = new JsonHelper();
tickets = jsonHelper.getTickets(result);
}
});
httpReader
.execute(url);
}
onAttach(Activity activity)执行AsyncTask的函数
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
new PrefetchData().execute();
}
此外,当在 AsyncTask 的 onPostExecute 中评论 dialog.dismiss() 时,对话框确实会显示,但当然永远不会关闭。
【问题讨论】:
-
你能展示一下你是如何执行任务的吗?
-
确保你在 UI 线程上调用
new PrefetchData().execute()(也许在你的onClick处理程序之一中,然后你应该得到你想要的。 -
它必须自动加载。
标签: java android android-asynctask