NullPointerException:尝试从未初始化的窗口检索回调
从 SplashActivity 导航到 LoginActivity 时,应用程序遇到错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
这个错误表明LoginActivity正在尝试在正确初始化之前访问视图组件。
原因
错误的具体原因在于 LoginActivity.java 代码中,其中类成员在 onCreate() 中调用 setContentView() 之前初始化。这会导致类成员尝试查找视图时视图尚不存在的情况。
解决方案
要解决此问题,请在以下位置声明视图成员没有初始化的类:
private EditText usernameField, passwordField; private TextView error; private ProgressBar progress;
然后,在 setContentView() 之后在 onCreate() 中初始化成员称为:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); usernameField = (EditText)findViewById(R.id.username); passwordField = (EditText)findViewById(R.id.password); error = (TextView)findViewById(R.id.error); progress = (ProgressBar)findViewById(R.id.progress); }
其他建议
虽然与错误没有直接关系,但建议在 UI 线程上运行任务时将 Timer 替换为 Handler:
new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, LoginActivity.class); startActivity(intent); finish(); } }, 1500);
以上是为什么在访问 LoginActivity 中的视图时出现 NullPointerException?的详细内容。更多信息请关注PHP中文网其他相关文章!