触发AlertDialog.Builder时窗口泄漏问题

时间:2014-04-14 20:50:22

标签: java android alertdialog

我有一个AlertDialog.Builder,如果用户没有网络连接,则会在用户首次打开应用时触发。 AlertDialogh作为NeutralButton一次点击就会跳转到startActivity

我收到leaked window错误。由于我无法.dismiss().cancel() AlertDialog,因此无法确定如何解决此问题。

还有其他方法可以显示此警报吗?

这是在onCreate

        if(isNetworkAvailable()){
        checkVersion();
    }else{
         AlertDialog.Builder warning = new AlertDialog.Builder(this);
         warning.setCancelable(false);
         warning.setTitle("Network Connection Not Established");
         warning.setMessage("Data will not be Synchronized. To have data Synchronized close the application and connect to WiFi or Cell Sevice Provider then Reopen.");
         warning.setNeutralButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface arg0, int arg1) {
                            findView();
                        }
                    });
         warning.show();
    }

checkVersion()没有问题,findView()提出了错误

    private void findView(){
    locationId = datasource.selectSettingsLocation();
    if(locationId != 0){
        Intent intent = new Intent(Startup.this, Return.class);
        startActivity(intent);
        this.finish();
    } else {
        Intent intent = new Intent(Startup.this, Main.class);
        startActivity(intent);
        this.finish();
    }
}

其他是在这种情况下被触发的内容Intent intent = new Intent(Startup.this, Main.class);

2 个答案:

答案 0 :(得分:2)

  

我得到了泄露的窗口错误

您没有发布相关代码,但是在进入下一个活动之前需要在Dialog上调用dismiss() - 在那个时间当前活动的上下文将 null 这就是你得到这种例外的原因。

所以在你的情况下,你可以这样做:

final AlertDialog.Builder warning = new AlertDialog.Builder(this);
...
public void onClick(DialogInterface arg0, int arg1) {
   warning.dismiss();
   findView();
}

只需要将Dialog作为最终字段,以便能够在匿名类的方法中使用它。

答案 1 :(得分:0)

我猜你有错误"上下文。请粘贴您的代码。如果您在片段中使用代码,请使用AlterDialog.Builder builder = new AlertDialog.Builder(getActivity());

否则请发布您的编码。