Comprendre l'erreur : "Tentative d'invocation de la méthode virtuelle '..." sur une référence d'objet nul"
Lors de la tentative de navigation depuis SplashActivity à LoginActivity, l'application plante avec l'erreur suivante :
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
Root Cause du problème :
L'erreur suggère qu'une référence à un objet Java renvoie null, empêchant l'exécution d'une opération qui nécessite un objet valide. Dans ce cas, il s'agit de l'initialisation des éléments de vue dans le code LoginActivity.java.
Solution :
La résolution réside dans l'initialisation correcte des éléments de vue avant de référencer les dans le code. La réponse fournie identifie à juste titre que l'initialisation des éléments de vue en dehors de onCreate() peut conduire à des références nulles.
Pour résoudre le problème, déclarez les champs de vue dans LoginActivity.java sans initialisation, comme suit :
private EditText usernameField, passwordField; private TextView error; private ProgressBar progress;
Ensuite, attribuez des valeurs aux champs dans onCreate() méthode :
@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); }
Optimisation supplémentaire :
Comme suggéré dans la réponse, utiliser Handler au lieu de Timer pour planifier la transition de SplashActivity à LoginActivity est une meilleure pratique recommandée, car elle garantit l'exécution sur le thread de l'interface utilisateur, évitant les problèmes potentiels et garantissant une expérience utilisateur plus fluide.
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!