在AsyncTask android中的dialog.show附近的WindowManager $ BadTokenException

时间:2013-11-20 10:32:01

标签: android android-asynctask android-alertdialog

如何在AsyncTask中显示一个对话框。在dialog.show()中获取BadToketException; 我尝试了很多方法,但我无法解决它。

还试图以不同的方式将上下文传递给对话框,但它给了我相同的结果。

public class RetriveStock extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        message = client.clientReceive(1); // I get data here.

        return null;
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

    @Override
    protected void onPostExecute(Void result) {

        if (message.contains("AlertExecuted:")) {
                final Dialog dialog = new Dialog(CreateAlert.this);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(R.layout.display_dialog);// Dialog layout
                TextView dialogText = (TextView) dialog.findViewById(R.id.digMsg);

                dialogText.setText("Alert Executed!");
                Button ok = (Button) dialog.findViewById(R.id.ok);

                ok.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                try {
                    dialog.show(); //WindowManager$BadTokenException
                } catch (Exception e) {

                    e.printStackTrace();
                }

        }
        super.onPostExecute(result);

    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

}

请帮忙。

2 个答案:

答案 0 :(得分:0)

    protected void onPreExecute() {
        // TODO Auto-generated method stub



        //          progressDialog = ProgressDialog.show(this, "", "loading news content");
        progressDialog = new ProgressDialog(context , AlertDialog.THEME_HOLO_LIGHT);
        progressDialog.setMessage(""+getString(R.string.laodnews));
        progressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.animate));
        progressDialog.setCancelable(false);
        progressDialog.show();

}

在执行前启动对话并在onpostexecute中停止..

答案 1 :(得分:0)

是manifest中的CreateAlert注册活动。如果不是,则必须传递已注册的活动上下文