首页 > Java > java教程 > 为什么我在 Android 中收到'尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'”?

为什么我在 Android 中收到'尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'”?

Barbara Streisand
发布: 2024-12-09 14:10:15
原创
1041 人浏览过

Why Do I Get

Android 中的“尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'”

当 Activity 在完全初始化之前尝试访问视图时,会发生此错误。具体来说,当在 null 对象上调用 Window.getCallback() 方法时会触发该错误,如果尚未在 onCreate() 中调用 setContentView() 方法,则可能会发生这种情况。

原因:
为了防止此错误,声明视图字段而不在类中初始化它们很重要声明:

private EditText usernameField, passwordField;
private TextView error;
private ProgressBar progress;
登录后复制

然后,在调用 setContentView() 后,在 onCreate() 中为这些字段赋值:

@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 在 UI 线程上运行代码而不是计时器,如下所示计时器在后台线程上执行任务。
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}, 1500);
登录后复制

以上是为什么我在 Android 中收到'尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板