我甚至无法在异步任务本身上创建自定义对话框,因此我调用了一个方法来显示它,这是我的方法:
public void showCustomLocationDialog(String title) {
final Dialog customDialog = new Dialog(this);
customDialog.setContentView(R.layout.custom_location_dialog);
customDialog.setTitle(title);
if (!customDialog.isShowing()) {
// set the custom dialog components - title, ProgressBar and button
TextView text = (TextView) customDialog.findViewById(R.id.textView);
text.setText(title);
customDialog.show();
}else if (customDialog.isShowing())
{
customDialog.dismiss();
}
}
我得到的错误:
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
....
我在这里做的是在onPreExecute
和onPostExecute
上调用此方法。
我尝试在PreExecute上创建对话框,但是,我遇到了一个错误。特别是" setContentView"。
当asynctask完成时,如何解除我的customdialog?
答案 0 :(得分:0)
Android不允许更改非android main thread
的线程中的gui。在activity.onCreate()
或view.onClick()
atc ..来自main thread
的android调用。
问题:你调用customDialog.dismiss();
来改变其他线程的gui
将你的gui更改只在AsyncTask
中,主线程调用此方法,请确保从主线程调用onPostExecute
,如果不是AsyncTask.execute()
不会打电话,
答案 1 :(得分:0)
您好,在AsyncTast中的activity.runOnUiThread中尝试UI操作
<强> onPostExecute { Activity.runOnUiThread {Dialog.dismiss()}
}