【问题标题】:My app crashed due to Dialog box我的应用程序因对话框而崩溃
【发布时间】:2018-01-02 06:58:30
【问题描述】:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder
            (getApplicationContext(), android.R.style.Theme_DeviceDefault);
    builder.setTitle("Exit").setMessage("Do you really want to Exit ? ")
    .setPositiveButton(" Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    System.exit(1);
                }
            })
    .setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });
    AlertDialog dialog = builder.create();
    dialog.show();
}

当我按下返回按钮时,此应用程序崩溃。

【问题讨论】:

  • 你能把你在崩溃时得到的错误日志贴出来吗?
  • 您遇到了什么错误?在这里也发布 logcat。
  • 添加错误跟踪或更多信息
  • 你能显示错误日志吗??
  • 用这个代替 getApplicationContext()

标签: java android dialog crash


【解决方案1】:

您正在显示带有应用程序上下文的Dialog。这在 Android 中是不允许的,因为 Dialog 需要 Activity 才能将自己附加到

改变这一行

AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext(), android.R.style.Theme_DeviceDefault);

进入这个

AlertDialog.Builder builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault);

当您使用Activity(从代码的外观来看)时,this(第一个参数)指的是您当前的活动,因此这应该可以解决您的问题

【讨论】:

    【解决方案2】:
    AlertDialog.Builder builder = new AlertDialog.Builder (this, android.R.style.Theme_DeviceDefault);
    

    通过活动参考

    【讨论】:

      【解决方案3】:

      首要任务。您不能显示带有应用程序上下文的对话框。对话框需要附加到某些活动,因此需要活动上下文而不是应用程序上下文。

      你需要重写Activity'sonBackPressed()方法来处理设备的返回键事件。

      你可以这样写:

      @Override
      public void onBackPressed() {
          confirmBeforeExit();
      }
      
      private void confirmBeforeExit() {
          AlertDialog alertDialog = new AlertDialog.Builder(this)
                  .setTitle("Exit")
                  .setMessage("Do you really want to Exit ? ")
                  .setPositiveButton(" Yes", new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialogInterface, int i) {
                          finish();
                      }
                  }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialogInterface, int i) {
                          dialogInterface.dismiss();
                      }
                  }).create();
          alertDialog.show();
      }
      

      【讨论】:

        【解决方案4】:
         AlertDialog.Builder builder = new AlertDialog.Builder
                        (this, R.style.AppTheme);
                builder.setTitle("Exit").setMessage("Do you really want to Exit ? ").setPositiveButton(" Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        System.exit(1);
                    }
                }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
        

        【讨论】:

        • 代码已经写在 Activity Scope 中,所以你可以直接写this 而不是MainActivity.this :)
        • 当然是的..在这种情况下我们可以直接使用它。
        猜你喜欢
        • 2020-11-01
        • 2023-03-14
        • 2019-12-26
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多