我不明白为什么会收到此错误。我正在使用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()根据情况进入时:
doInBackground()
[...] connectionProgressDialog.dismiss(); downloadSpinnerProgressDialog.show(); [...]
每当我尝试downloadSpinnerProgressDialog.show()我都会收到错误消息。
downloadSpinnerProgressDialog.show()
有想法吗?
该方法show()必须从被调用用户界面(UI)螺纹,而doInBackground()在不同的螺纹,其是主要的原因,运行AsyncTask被设计。
show()
AsyncTask
你必须调用show()无论是在onProgressUpdate()或onPostExecute()。
onProgressUpdate()
onPostExecute()
例如:
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(); } }