Heim >Java >javaLernprogramm >Warum erhalte ich eine NullPointerException, wenn ich auf Ansichten in meiner LoginActivity zugreife?

Warum erhalte ich eine NullPointerException, wenn ich auf Ansichten in meiner LoginActivity zugreife?

Linda Hamilton
Linda HamiltonOriginal
2024-12-07 01:43:12927Durchsuche

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

NullPointerException: Versuch, einen Rückruf aus einem nicht initialisierten Fenster abzurufen

Beim Navigieren von SplashActivity zu LoginActivity tritt in der App ein Fehler auf:

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

Dieser Fehler weist darauf hin, dass LoginActivity versucht, zuvor auf eine Ansichtskomponente zuzugreifen wurde ordnungsgemäß initialisiert.

Ursache

Die spezifische Ursache des Fehlers liegt im LoginActivity.java-Code, in dem die Klassenmitglieder initialisiert werden, bevor setContentView() aufgerufen wird onCreate(). Dies führt dazu, dass die Ansichten noch nicht vorhanden sind, wenn die Klassenmitglieder versuchen, sie zu finden.

Lösung

Um das Problem zu beheben, deklarieren Sie die Ansichtsmitglieder in die Klasse ohne Initialisierung:

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

Dann initialisieren Sie die Mitglieder in onCreate(), nachdem setContentView() ausgeführt wurde aufgerufen:

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);
}

Zusätzlicher Hinweis

Obwohl dies nicht direkt mit dem Fehler zusammenhängt, wird empfohlen, Timer durch Handler zu ersetzen, wenn eine Aufgabe im UI-Thread ausgeführt wird:

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

Das obige ist der detaillierte Inhalt vonWarum erhalte ich eine NullPointerException, wenn ich auf Ansichten in meiner LoginActivity zugreife?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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