Maison >Java >javaDidacticiel >Pourquoi est-ce que j'obtiens « Tentative d'appel de la méthode virtuelle 'android.view.Window$Callback android.view.Window.getCallback()' sur une référence d'objet Null » dans Android ?

Pourquoi est-ce que j'obtiens « Tentative d'appel de la méthode virtuelle 'android.view.Window$Callback android.view.Window.getCallback()' sur une référence d'objet Null » dans Android ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 14:10:151039parcourir

Why Do I Get

« Tentative d'invocation de la méthode virtuelle 'android.view.Window$Callback android.view.Window.getCallback()' sur une référence d'objet Null » dans Android

Cette erreur se produit lorsqu'une activité tente d'accéder aux vues avant qu'elle n'ait été complètement initialisée. Plus précisément, l'erreur est déclenchée lorsque la méthode Window.getCallback() est appelée sur un objet nul, ce qui peut se produire si la méthode setContentView() n'a pas encore été invoquée dans onCreate().

Cause :
Pour éviter cette erreur, il est important de déclarer les champs de vue sans les initialiser dans la classe déclaration :

private EditText usernameField, passwordField;
private TextView error;
private ProgressBar progress;

Ensuite, attribuez des valeurs à ces champs dans onCreate() après que setContentView() a été appelé :

@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);
}

Conseils supplémentaires :

  • Envisagez d'utiliser un gestionnaire pour exécuter du code sur le thread de l'interface utilisateur au lieu d'un minuteur, car les minuteurs exécutent des tâches sur un fil de fond.
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}, 1500);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn