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
Libérer: 2024-12-09 14:10:15
original
1023 Les gens l'ont consulté

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;
Copier après la connexion

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);
}
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal