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
Freigeben: 2024-12-07 01:43:12
Original
878 Leute haben es durchsucht

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
Nach dem Login kopieren

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

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

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

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!

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