mle*_*vit 78 java android runtime-error progressdialog looper
我不明白为什么我会收到这个错误.我正在使用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...");
}
Run Code Online (Sandbox Code Playgroud)
当我doInBackground()根据条件进入时我:
[...]
connectionProgressDialog.dismiss();
downloadSpinnerProgressDialog.show();
[...]
Run Code Online (Sandbox Code Playgroud)
每当我尝试downloadSpinnerProgressDialog.show()我收到错误.
有什么想法吗?
Kon*_*rov 105
show()必须从用户界面(UI)线程调用该方法,同时doInBackground()在不同的线程上运行,这是AsyncTask设计的主要原因.
你必须show()在里面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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 81
我有一个类似的问题,但从阅读这个问题,我想我可以在UI线程上运行:
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
alertDialog.show();
}
});
Run Code Online (Sandbox Code Playgroud)
似乎为我做了伎俩.