android.view.WindowManager$BadTokenException

    最近做了一个自定义对话框的功能,但是经常会报出以上错误,经查看日志信息,发现是由于在alertDialog.show()时出的问题,原因在于当前Activity是否存在,如果当前Activity不存在,就会报出异常,因此,一种解决的办法是把alertDialog.show()try{...}catch{...};另一种,是在alertDialog.show()之前做个判断,看当前Activity是否存在, if(!TestEnvironment.this.isFinishing())

// 检测出异常时弹出对话框
 private void showDialog() {
  final AlertDialog.Builder builder;
  final AlertDialog alertDialog;
  LayoutInflater inflater = (LayoutInflater)context
    .getSystemService(LAYOUT_INFLATER_SERVICE);
  View layout = inflater.inflate(R.layout.dialog,null);
 
  TextView dialogTitle = (TextView) layout
    .findViewById(R.id.dialogtitle_id);
 
  if (sysFlag) {
   dialogTitle.setText(dialogsysStr);
  } else if (softFlag) {
   dialogTitle.setText(dialogSoftStr);
  }
 
  builder = new AlertDialog.Builder(context);
  alertDialog = builder.create();
  // 在此使用setview方法可以设置布局文件和alertdialog四周边框的距离,可以消除黑边框
  alertDialog.setView(layout, 0, 0, 0, 0);
  
  //
//  try {//方法一
  if(!TestEnvironment.this.isFinishing())   //方法二
   alertDialog.show();
//  } catch (Exception e) {
//   // TODO: handle exception
//   finish();
//  }
  
 
  Button butDialog_ok = (Button) layout
    .findViewById(R.id.dialog_button_ok);
  Button butDialog_cancel = (Button) layout
    .findViewById(R.id.dialog_button_cancel);
  
  butDialog_ok.setOnClickListener(new View.OnClickListener() {
 
   @Override
   public void onClick(View v) {
 
    if (sysFlag) {
     update.openDownloadUpdateUI(eUpdateType.SYSTEM_UPDATE,
       TestEnvironment.this); // 更新系统文件
    } else if (softFlag) {
     update.openDownloadUpdateUI(eUpdateType.APP_UPDATE,
       TestEnvironment.this); // 更新应用软件
    }
    alertDialog.dismiss();
 
   }
  });
 
  butDialog_cancel.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    alertDialog.dismiss();
   }
  });
 
 }


你可能感兴趣的:(android.view.WindowManager$BadTokenException)