Tentative d'invoquer la méthode virtuelle android.vue.La fenêtre de$Callback android.vue.De la fenêtre.getCallback () sur un objet nul de référence
Quand mon SplashActivity
ouvre la LoginActivity
mon application se bloque.
Ce qui suit est mon SplashActivity.java
:
package com.example.android.appName;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.util.Timer;
import java.util.TimerTask;
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}
}, 1500);
}
}
et mon LoginActivity.java
:
package com.example.android.appName;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
public class LoginActivity extends AppCompatActivity {
private EditText usernameField = (EditText)findViewById(R.id.username),
passwordField = (EditText)findViewById(R.id.password);
private TextView error = (TextView)findViewById(R.id.error);
private ProgressBar progress = (ProgressBar)findViewById(R.id.progress);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.login_menu, menu);
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT > 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
onBackPressed();
return true;
}
return super.onKeyDown(keyCode, event);
}
public void exit(MenuItem item) {
finish();
}
public void signIn(View view) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
Partie de AndroidManifest.xml
:
<activity android:name=".SplashActivity"
android:theme="@style/NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".LoginActivity"
android:label="@string/title_activity_login" />
Erreur dans le logcat:
04-16 23:24:16.124 4015-4015/com.example.android.appName E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.appName, PID: 4015
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.appName/com.example.android.appName.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2993)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3248)
at android.app.ActivityThread.access$1000(ActivityThread.java:197)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6872)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:68)
at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:145)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:42)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:186)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:168)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:508)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:180)
at com.example.android.appName.LoginActivity.<init>(LoginActivity.java:20)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1690)
at android.app.Instrumentation.newActivity(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2983)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3248)
at android.app.ActivityThread.access$1000(ActivityThread.java:197)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6872)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Avez-vous déclarer votre LoginActivity dans le manifeste?
Oui, je l'ai fait
Désolé, mais je ne suis pas tout à fait sûr de ce que vous entendez par 'exécuter dans le thread de l'INTERFACE utilisateur' 🙁
Pouvez-vous montrer le code complet pour
Oui, je l'ai fait
TimerTask.run()
ne pas exécuter dans le thread de l'INTERFACE utilisateur. Si vous démarrez votre activité à partir de la thread de l'INTERFACE utilisateur fonctionne-t-cela?Désolé, mais je ne suis pas tout à fait sûr de ce que vous entendez par 'exécuter dans le thread de l'INTERFACE utilisateur' 🙁
Pouvez-vous montrer le code complet pour
LoginActivity
? Ou au moins tous les déclaré champs de la classe et de la pleine onCreate()
pour commencer.
OriginalL'auteur | 2016-04-16
Vous devez vous connecter pour publier un commentaire.
Un
Activity
n'est pas entièrement initialisé et prêt à rechercher des points de vue jusqu'à ce que aprèssetContentView(...)
est appelé dansonCreate()
.Seulement déclarer les champs comme suit:
et ensuite affecter les valeurs dans
onCreate
:Pourrait ne pas être une partie du problème, mais comme un bit supplémentaire de l'avis d'un
Timer
exécute leTimerTask
sur un thread d'arrière-plan et doit être évité dans ce cas. Remplacer leTimer
avec unHandler
au lieu de l'exécuter sur le thread d'INTERFACE utilisateur.Handler
bien 🙂Ok ça devrait être le bon cette fois 😉
Il est sûr! Merci beaucoup 😛 Sur une note de côté, j'espère vraiment que Android Studio sera un jour de donner plus utile et le plus clair des messages d'erreur que cela...
Je suis d'accord que particulier trace de la pile n'est pas très utile dans la détermination de la façon de résoudre le problème. La plupart des autres messages d'erreur à l'extérieur du cycle de vie des rappels et la configuration d'un projet sont plus faciles à comprendre.
"Une Activité n'est pas entièrement initialisé et prêt à rechercher des points de vue jusqu'à ce que après setContentView(...) est appelée dans onCreate()." SPOT SUR . Merci
OriginalL'auteur George Mulligan
Vues définies dans le fichier xml ne peut être accessible que dans du code java, après le réglage de la
ContentView
lorsque le fichier xml à l'aide de:Donc 1er appel de méthode ci-dessus à l'intérieur de
onCreate
méthode, puis initialiser leView
instances à l'intérieur deonCreate
ou à l'intérieur les méthodes de l'instance va être utilisé.OriginalL'auteur Gowtham Gowda