从异步任务中删除自定义对话框

时间:2017-04-30 09:15:27

标签: android android-asynctask

我甚至无法在异步任务本身上创建自定义对话框,因此我调用了一个方法来显示它,这是我的方法:

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)
....

我在这里做的是在onPreExecuteonPostExecute上调用此方法。

我尝试在PreExecute上创建对话框,但是,我遇到了一个错误。特别是" setContentView"。

当asynctask完成时,如何解除我的customdialog?

2 个答案:

答案 0 :(得分:0)

Android不允许更改非android main thread的线程中的gui。在activity.onCreate()view.onClick() atc ..来自main thread的android调用。

问题:你调用customDialog.dismiss();来改变其他线程的gui

<{1>}中的

将你的gui更改只在AsyncTask中,主线程调用此方法,请确保从主线程调用onPostExecute,如果不是AsyncTask.execute()不会打电话,

答案 1 :(得分:0)

您好,在AsyncTast中的activity.runOnUiThread中尝试UI操作

<强> onPostExecute {        Activity.runOnUiThread {Dialog.dismiss()}

}