【发布时间】:2010-08-13 14:32:30
【问题描述】:
我正在编写一个 Activity,它通过 HTTP 从 Web 获取一些 XML,然后将其解析为 DOM。然后它从 DOM 中提取一些所需的数据。
您可以想象,这需要一些时间,所以我将该代码放入它自己的线程中,然后尝试设置一个 ProgressDialog 以在用户等待它完成时显示。
问题是 ProgressDialog 根本不显示。如果我删除对dismiss() 的调用,那么它会在工作完成后显示,并且显然只是坐在那里......
这是我的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
progressDialog = ProgressDialog.show(this, "", "Loading...", true);
Thread downloadThread = new Thread(new DownloadVerseThread());
downloadThread.start();
setContentView(R.layout.main);
TextView verseView = (TextView) findViewById(R.id.displayFighterVerse);
TextView dateView = (TextView) findViewById(R.id.displayDateRange);
TextView referenceView = (TextView) findViewById(R.id.displayReference);
try {
downloadThread.join();
} catch (InterruptedException e) {
Log.e(TAG, "Attempted to set the UI values before we were ready.");
return;
}
Log.d(TAG, "Date: " + date);
Log.d(TAG, "Reference: " + reference);
Log.d(TAG, "Scripture: " + scripture);
progressDialog.dismiss();
dateView.setText(date);
referenceView.setText(reference);
verseView.setText(scripture);
}
private class DownloadVerseThread implements Runnable {
@Override
public void run() {
try {
FighterVerseDownloader downloader = new FighterVerseDownloader();
date = downloader.getDateRange();
reference = downloader.getReference();
scripture = downloader.getScripture();
} catch (FighterVersesException e) {
Log.e("FighterVerses", "Failed to get the Fighter Verse", e);
}
}
}
FighterVersesDownloader 的构造函数是完成所有关于 HTTP 和 DOM 的工作的地方。
关于我缺少什么的任何想法?我在使用 AsyncTask 时看到过一些类似的线程,但我想直接使用良好的老式线程,建议的解决方案不适用。
【问题讨论】:
标签: android