Heim > Java > javaLernprogramm > Warum stürzt meine Android-App während der Aktivitätsnavigation mit der Meldung „Versuch, die virtuelle Methode ‚android.view.Window$Callback android.view.Window.getCallback()' für eine Nullobjektreferenz aufzurufen' ab?

Warum stürzt meine Android-App während der Aktivitätsnavigation mit der Meldung „Versuch, die virtuelle Methode ‚android.view.Window$Callback android.view.Window.getCallback()' für eine Nullobjektreferenz aufzurufen' ab?

Mary-Kate Olsen
Freigeben: 2024-12-05 03:42:17
Original
1000 Leute haben es durchsucht

Why Does My Android App Crash with

Android: „Versuch, die virtuelle Methode ‚android.view.Window$Callback android.view.Window.getCallback()‘ für eine Nullobjektreferenz aufzurufen“

Beim Navigieren von SplashActivity zu LoginActivity stürzt die App mit der Fehlermeldung „Versuch, eine virtuelle Methode aufzurufen“ ab „android.view.Window$Callback android.view.Window.getCallback()“ für eine Nullobjektreferenz.“ Dieser Fehler tritt normalerweise auf, wenn auf Ansichten zugegriffen oder UI-bezogene Aktionen ausgeführt werden, bevor die Aktivität vollständig initialisiert ist.

In diesem Fall wird der Fehler höchstwahrscheinlich durch das folgende Problem verursacht:

Vorzeitige Initialisierung von Ansichtsfeldern:

In LoginActivity.java werden die Felder „usernameField“, „passwordField“, „error“ und „fortschritt“ deklariert und zugewiesene Werte im Konstruktor. Allerdings wurde die onCreate()-Methode der Aktivität beim Zugriff auf diese Felder noch nicht aufgerufen, was bedeutet, dass setContentView() nicht ausgeführt wurde und die Ansichtshierarchie nicht eingerichtet wurde. Folglich versuchen die Felder, auf nicht vorhandene Ansichten zu verweisen, was zur Nullzeiger-Ausnahme führt.

Lösung:

Um das Problem zu beheben, ist es notwendig Initialisieren Sie die Ansichtsfelder erst, nachdem setContentView() aufgerufen wurde. Dadurch wird sichergestellt, dass die Ansichtshierarchie vollständig initialisiert und zugänglich ist.

Der aktualisierte Code in LoginActivity.java:

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

@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);
}
Nach dem Login kopieren

Zusätzlich wird empfohlen, zur Steuerung einen Handler anstelle eines Timers zu verwenden die Navigation von SplashActivity zu LoginActivity, um sicherzustellen, dass sie im UI-Thread auftritt.

Der aktualisierte Code in SplashActivity.java:

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}, 1500);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum stürzt meine Android-App während der Aktivitätsnavigation mit der Meldung „Versuch, die virtuelle Methode ‚android.view.Window$Callback android.view.Window.getCallback()' für eine Nullobjektreferenz aufzurufen' ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage