Android Java程序使用AlertDialog时应用闪退求助
问题原因与修复方案
你的应用闪退是因为空指针异常(NullPointerException),核心问题出在TextView t1=findViewById(R.id.t);这行代码的位置:
在Activity类中直接声明并初始化成员变量t1时,Activity还未执行setContentView方法,布局文件还没加载到内存中,findViewById找不到对应的控件,会返回null。后续点击对话框按钮时调用t1.setText(),对null对象执行方法就会触发空指针,导致应用闪退。
修复后的代码
package com.example.alertdialogbox; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AlertDialog; import android.os.Bundle; import android.content.DialogInterface; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView t1; // 仅声明变量,不立即初始化 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); t1 = findViewById(R.id.t); // 布局加载完成后再获取控件实例 AlertDialog.Builder b1=new AlertDialog.Builder(this); b1.setTitle("Alert Dialog"); b1.setMessage("Do you want to continue?"); b1.setCancelable(false); b1.setPositiveButton("YES", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { t1.setText("Clicked YES"); } }); b1.setNegativeButton("NO", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { t1.setText("Clicked NO"); } }); b1.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { t1.setText("Clicked CANCEL"); } }); AlertDialog d=b1.create(); d.show(); } }
关键说明
setContentView(R.layout.activity_main)的作用是将布局文件加载到Activity的内存中,只有执行完这一步,findViewById才能找到布局里的控件。- 所有需要获取布局控件的代码,都必须放在
setContentView之后执行,避免出现空指针异常。
内容的提问来源于stack exchange,提问作者skullXcalibre
相关产品推荐
相关产品推荐

