首页 >Java >java教程 >为什么在访问 LoginActivity 中的视图时出现 NullPointerException?

为什么在访问 LoginActivity 中的视图时出现 NullPointerException?

Linda Hamilton
Linda Hamilton原创
2024-12-07 01:43:12910浏览

Why Am I Getting a NullPointerException When Accessing Views in My LoginActivity?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn