Maison > Java > javaDidacticiel > Pourquoi est-ce que je reçois une NullPointerException lors de l'accès aux vues dans mon LoginActivity ?

Pourquoi est-ce que je reçois une NullPointerException lors de l'accès aux vues dans mon LoginActivity ?

Linda Hamilton
Libérer: 2024-12-07 01:43:12
original
930 Les gens l'ont consulté

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

NullPointerException : tentative de récupération du rappel à partir d'une fenêtre non initialisée

Lors de la navigation de SplashActivity à LoginActivity, l'application rencontre une erreur :

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
Copier après la connexion

Cette erreur indique que LoginActivity tente d'accéder à un composant de vue avant lui. a été correctement initialisé.

Cause

La cause spécifique de l'erreur réside dans le code LoginActivity.java, où les membres de la classe sont initialisés avant l'appel de setContentView() dans onCreate(). Cela conduit à une situation dans laquelle les vues n'existent pas encore lorsque les membres de la classe tentent de les trouver.

Solution

Pour résoudre le problème, déclarez les membres de la vue dans la classe sans initialisation :

private EditText usernameField, passwordField;
private TextView error;
private ProgressBar progress;
Copier après la connexion

Ensuite, initialisez les membres dans onCreate() après que setContentView() ait été appelé :

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

Bien que cela ne soit pas directement lié à l'erreur, il est recommandé de remplacer Timer par Handler lors de l'exécution d'une tâche sur le thread de l'interface utilisateur :

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