【发布时间】:2013-10-17 05:29:57
【问题描述】:
我在 doInBackground 方法中使用 AsyncTask 打开progressdialog,问题正在从数据库加载,问题成功加载后,进度对话框将关闭
但我的问题是有时我会出现以下错误
android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@44757528 is not valid; is your activity running?
所以我在下面放了一些代码,如果活动在对话框被关闭之前被破坏,则关闭progressdialog
protected void onDestroy() {
if (pdForNewQuestion != null)
pdForNewQuestion.dismiss();
super.onDestroy();
}
但我仍然面临这个问题。我没有破坏任何活动,但有时会突然出现错误,有时它会正常工作
异步代码如下
// Start new question in every 60 seconds :)
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
mProgressStatus++;
} catch (Exception e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
mProgress.setProgress(mProgressStatus);
txtCountingNum.setText((timer--) + "\nSec.");
if (timer < 0) {
questionLoadWithAsyncTask();
}
}
});
}
}
}).start();
public void questionLoadWithAsyncTask() {
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
pdForNewQuestion = new ProgressDialog(QuizActivity.this);
pdForNewQuestion.setTitle("Please wait...");
pdForNewQuestion.setMessage("Question is loading...");
pdForNewQuestion.setCancelable(false);
pdForNewQuestion.setIndeterminate(true);
pdForNewQuestion.show();
}
@Override
protected Void doInBackground(Void... arg0) {
wordsCursor = dbHelper.getRandomWords();
return null;
}
@Override
protected void onPostExecute(Void result) {
if (pdForNewQuestion != null) {
pdForNewQuestion.dismiss();
}
}
}.execute();
}
【问题讨论】:
-
发布你的异步任务代码,我猜你还没有关闭你的进度对话框。
-
@Kinjal 请发布您的
asynctask代码 -
@Kinjal 您在旋转手机时是否遇到错误或通常会出现错误?
-
不是在旋转的时候,但是在运行我的活动时会自动出现错误,它可能是某个时间或不同的时间:(
标签: java android android-asynctask android-progressbar