我不明白为什么我会得到这个错误。我正在使用AsyncTask在后台运行一些进程。
我有:
protected void onPreExecute()
{
connectionProgressDialog = new ProgressDialog(SetPreference.this);
connectionProgressDialog.setCancelable(true);
connectionProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
connectionProgressDialog.setMessage("Connecting to site...");
connectionProgressDialog.show();
downloadSpinnerProgressDialog = new ProgressDialog(SetPreference.this);
downloadSpinnerProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
downloadSpinnerProgressDialog.setMessage("Downloading wallpaper...");
}
当我进入doInBackground()
时,取决于以下条件:
[...]
connectionProgressDialog.dismiss();
downloadSpinnerProgressDialog.show();
[...]
每当我尝试downloadSpinnerProgressDialog.show()
时,我都会收到错误信息。
有什么想法吗,伙计们?
发布于 2010-09-01 11:16:46
方法show()
必须从User-Interface (UI) thread调用,而doInBackground()
运行在不同的线程上,这是设计AsyncTask
的主要原因。
您必须在onProgressUpdate()
或onPostExecute()
中调用show()
。
例如:
class ExampleTask extends AsyncTask<String, String, String> {
// Your onPreExecute method.
@Override
protected String doInBackground(String... params) {
// Your code.
if (condition_is_true) {
this.publishProgress("Show the dialog");
}
return "Result";
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
connectionProgressDialog.dismiss();
downloadSpinnerProgressDialog.show();
}
}
发布于 2011-09-01 20:05:58
我也有类似的问题,但通过阅读这个问题,我认为我可以在UI线程上运行:
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
alertDialog.show();
}
});
似乎对我很管用。
发布于 2012-05-16 18:08:03
我也很难做到这一点,我的解决方案是同时使用hyui和konstantin的答案,
class ExampleTask extends AsyncTask<String, String, String> {
// Your onPreExecute method.
@Override
protected String doInBackground(String... params) {
// Your code.
if (condition_is_true) {
this.publishProgress("Show the dialog");
}
return "Result";
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
alertDialog.show();
}
});
}
}
https://stackoverflow.com/questions/3614663
复制相似问题