このエラーが発生する理由がわかりません。 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()
を試すたびにエラーが発生します。
アイデアはありますか?
メソッドshow()
は ser-Interface(UI)thread から呼び出す必要がありますが、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();
}
}
私は同様の問題を抱えていましたが、この質問を読んで、UIスレッドで実行できると思いました:
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
alertDialog.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);
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
alertDialog.show();
}
});
}
}
final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msgs) {
//write your code hear which give error
}
}
new Thread(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessage(1);
//this will call handleMessage function and hendal all error
}
}).start();