Android:“尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'”
从 SplashActivity 导航到 LoginActivity 时,应用程序崩溃并显示错误“尝试调用虚拟方法”空对象引用上的“android.view.Window$Callback android.view.Window.getCallback()”。”此错误通常在 Activity 完全初始化之前访问视图或执行 UI 相关操作时发生。
在这种情况下,该错误很可能是由以下问题引起的:
视图字段过早初始化:
在LoginActivity.java中,对usernameField、passwordField、error和progress字段进行声明并赋值在构造函数中。然而,访问这些字段时,Activity 的 onCreate() 方法尚未被调用,这意味着 setContentView() 尚未执行,视图层次结构尚未设置。因此,字段试图引用不存在的视图,从而导致空指针异常。
解决方案:
要解决此问题,需要仅在调用 setContentView() 后才初始化视图字段。这样可以确保视图层次结构完全初始化并且可访问。
LoginActivity.java 中更新的代码:
private EditText usernameField; private EditText passwordField; private TextView error; private ProgressBar progress; @Override 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); }
另外,建议使用 Handler 而不是 Timer 来控制从 SplashActivity 到 LoginActivity 的导航,以确保它发生在 UI 线程上。
更新后的代码SplashActivity.java:
new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, LoginActivity.class); startActivity(intent); finish(); } }, 1500);
以上是为什么我的 Android 应用程序在 Activity 导航期间因'尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'”而崩溃?的详细内容。更多信息请关注PHP中文网其他相关文章!